@snabcentr/client-core 2.60.2 → 2.60.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"snabcentr-client-core.mjs","sources":["../../../projects/core/common/classes/sc-image.ts","../../../projects/core/auth/tokens/sc-access-auth-token-storage-key.ts","../../../projects/core/auth/tokens/sc-guest-token-storage-key.ts","../../../projects/core/auth/tokens/sc-refresh-auth-token-storage-key.ts","../../../projects/core/providers/ssr.providers.ts","../../../projects/core/tokens/sc-api-keys.ts","../../../projects/core/auth/services/sc-token.service.ts","../../../projects/core/httpInterceptors/tokens/sc-auth-add-header-required.ts","../../../projects/core/httpInterceptors/tokens/sc-is-logout-request.ts","../../../projects/core/httpInterceptors/tokens/sc-is-refresh-token-required.ts","../../../projects/core/tokens/notification-options.ts","../../../projects/core/tokens/sc-cache-lifetime.ts","../../../projects/core/tokens/sc-company-name.ts","../../../projects/core/tokens/sc-configurator-components.ts","../../../projects/core/tokens/sc-configurator-settings.ts","../../../projects/core/tokens/sc-default-page-meta.ts","../../../projects/core/tokens/sc-is-hidden-error-alert.ts","../../../projects/core/tokens/sc-linear-values-token.ts","../../../projects/core/tokens/sc-path-image-not-found.ts","../../../projects/core/tokens/sc-release.ts","../../../projects/core/tokens/sc-update-interval.ts","../../../projects/core/tokens/sc-urls.ts","../../../projects/core/tokens/sc-feedback-api.ts","../../../projects/core/tokens/sc-date-format.ts","../../../projects/core/user-metrika/enums/sc-user-metrika-goals-enum.ts","../../../projects/core/user/enums/sc-user-type.ts","../../../projects/core/user-metrika/services/sc-user-metrika.service.ts","../../../projects/core/auth/services/sc-auth.service.ts","../../../projects/core/banners/dto/sc-banner.ts","../../../projects/core/user/enums/sc-client-type.ts","../../../projects/core/user/dto/sc-user.ts","../../../projects/core/user/services/sc-user.service.ts","../../../projects/core/user/tokens/sc-user-providers.ts","../../../projects/core/banners/services/sc-banner.service.ts","../../../projects/core/cart/constants/sc-empty-cart.ts","../../../projects/core/cart/classes/sc-sum.ts","../../../projects/core/catalog/dto/sc-seo-resource.ts","../../../projects/core/catalog/dto/sc-category.ts","../../../projects/core/catalog/dto/sc-product.ts","../../../projects/core/cart/dto/sc-cart-item.ts","../../../projects/core/cart/dto/sc-cart.ts","../../../projects/core/cart/dto/sc-i-sales-direction-cart.ts","../../../projects/core/converters/services/sc-converters.service.ts","../../../projects/core/catalog/enums/sc-catalog-format.ts","../../../projects/core/catalog/enums/sc-product-tile-type.ts","../../../projects/core/user/dto/sc-user-metadata.ts","../../../projects/core/references/enums/sc-reference-name.ts","../../../projects/core/references/services/sc-references.service.ts","../../../projects/core/ui/utils/filter-changed-by-key.ts","../../../projects/core/ui/services/sc-ui.service.ts","../../../projects/core/providers/terminal.providers.ts","../../../projects/core/warehouse/services/sc-warehouse.service.ts","../../../projects/core/cart/services/sc-cart.service.ts","../../../projects/core/catalog/enums/sc-mime-types.ts","../../../projects/core/catalog/classes/sc-cached-data.ts","../../../projects/core/catalog/classes/sc-cached-item.ts","../../../projects/core/catalog/dto/sc-virtual-category.ts","../../../projects/core/catalog/internal/sc-i-category-dto.ts","../../../projects/core/catalog/tokens/sc-count-first-discounted-products.ts","../../../projects/core/providers/sc-id-or-slug-in-route.ts","../../../projects/core/pipes/sc-id-or-slug.pipe.ts","../../../projects/core/catalog/services/sc-catalog.service.ts","../../../projects/core/catalog/services/sc-favorite.service.ts","../../../projects/core/catalog/services/sc-recommendation.service.ts","../../../projects/core/config/sc-route-keys.ts","../../../projects/core/configurator/services/sc-configurator.service.ts","../../../projects/core/contacts/enums/sc-feedback-forms.ts","../../../projects/core/contacts/enums/sc-social-type.ts","../../../projects/core/contacts/dto/sc-uploaded-file.ts","../../../projects/core/contacts/services/sc-contacts.service.ts","../../../projects/core/httpInterceptors/tokens/sc-is-header-required.ts","../../../projects/core/providers/sc-product-pagination-options.ts","../../../projects/core/search/services/sc-search.service.ts","../../../projects/core/providers/search-term.providers.ts","../../../projects/core/providers/virtual-category.providers.ts","../../../projects/core/providers/sc-company-info.ts","../../../projects/core/utm/services/sc-utm.service.ts","../../../projects/core/contacts/services/sc-feedback.service.ts","../../../projects/core/contacts/services/sc-requisites.service.ts","../../../projects/core/contragent/services/sc-contragent.service.ts","../../../projects/core/delivery-address/services/sc-delivery-address.service.ts","../../../projects/core/frequently-asked-questions/services/sc-frequently-asked-questions.service.ts","../../../projects/core/files/classes/sc-document-info-node.ts","../../../projects/core/files/enums/sc-document-info-types-enum.ts","../../../projects/core/files/enums/sc-icon-types-enum.ts","../../../projects/core/files/services/sc-files.service.ts","../../../projects/core/guards/sc-auth-as-client.guard.ts","../../../projects/core/guards/sc-id-or-slug.guard.ts","../../../projects/core/pipes/sc-media-image-transformer.pipe.ts","../../../projects/core/helpers/sc-image-helper.ts","../../../projects/core/helpers/sc-units-helper.ts","../../../projects/core/httpInterceptors/classes/sc-cache-settings.ts","../../../projects/core/httpInterceptors/tokens/sc-cache-settings.ts","../../../projects/core/httpInterceptors/tokens/sc-guest-endpoints.ts","../../../projects/core/httpInterceptors/tokens/sc-guest-parameter-name.ts","../../../projects/core/httpInterceptors/sc-auth.interceptor.ts","../../../projects/core/httpInterceptors/internal/classes/sc-cached-response.ts","../../../projects/core/httpInterceptors/sc-cache.interceptor.ts","../../../projects/core/httpInterceptors/sc-convert.interceptor.ts","../../../projects/core/httpInterceptors/sc-errors.interceptor.ts","../../../projects/core/httpInterceptors/sc-options.interceptor.ts","../../../projects/core/httpInterceptors/sc-guest.interceptor.ts","../../../projects/core/httpInterceptors/sc-date-format.interceptor.ts","../../../projects/core/references/enums/sc-opf-list.ts","../../../projects/core/references/enums/sc-order-state-status.ts","../../../projects/core/references/enums/sc-payment-status.ts","../../../projects/core/references/enums/sc-reclamation-status.ts","../../../projects/core/locations/services/sc-location.service.ts","../../../projects/core/news/classes/sc-news.ts","../../../projects/core/news/classes/index.ts","../../../projects/core/news/tokens/sc-count-last-news.ts","../../../projects/core/news/services/sc-news.service.ts","../../../projects/core/news/index.ts","../../../projects/core/notifications/enums/sc-notification-action-types.ts","../../../projects/core/notifications/enums/sc-notification-level-names.ts","../../../projects/core/notifications/services/sc-notifications.service.ts","../../../projects/core/order/dto/sc-delivery-cost.ts","../../../projects/core/order/enums/sc-delivery-type.ts","../../../projects/core/order/enums/sc-payment-type.ts","../../../projects/core/order/dto/sc-order.ts","../../../projects/core/order/dto/sc-order-short.ts","../../../projects/core/order/services/sc-orders.service.ts","../../../projects/core/pagination/services/sc-pagination.service.ts","../../../projects/core/questionnaire/enums/sc-questionnaire-status-enum.ts","../../../projects/core/questionnaire/services/sc-questionnaire.service.ts","../../../projects/core/reclamation/services/sc-reclamation.service.ts","../../../projects/core/sc-json-ld/sc-json-ld.component.ts","../../../projects/core/sc-json-ld/sc-json-ld.module.ts","../../../projects/core/suggestion/enums/sc-i-suggestion-type.ts","../../../projects/core/suggestion/services/sc-suggestion.service.ts","../../../projects/core/services/sc-seo.service.ts","../../../projects/core/utils/phone-fotmatter/sc-phone.service.ts","../../../projects/core/vacancies/classes/sc-vacancy.ts","../../../projects/core/vacancies/classes/sc-vacancies-list.ts","../../../projects/core/vacancies/tokens/sc-vacancies-datasource.ts","../../../projects/core/vacancies/services/sc-vacancies.service.ts","../../../projects/core/vCard/sc-v-card.service.ts","../../../projects/core/verification/services/sc-verification.service.ts","../../../projects/core/public-api.ts","../../../projects/core/snabcentr-client-core.ts"],"sourcesContent":["import { ScIImage } from '../interfaces/sc-i-image';\n\n/**\n * Базовый класс для изображений.\n */\nexport class ScImage implements ScIImage {\n /**\n * Изображение.\n */\n public image: string;\n\n /**\n * Альтернативный текст.\n */\n public alt: string;\n\n /**\n * Изображение в формате WebP.\n */\n public imageWebp?: string;\n\n /**\n * Инициализирует экземпляр класса {@link ScImage}.\n *\n * @param image Изображение.\n * @param alt Альтернативный текст.\n * @param imageWebp Изображение в формате WebP.\n */\n constructor(image: string, alt: string, imageWebp?: string) {\n this.image = image;\n this.imageWebp = imageWebp;\n this.alt = alt;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен, указывающий ключ токена доступа пользователя к API в {@link Storage}.\n */\nexport const SC_ACCESS_AUTH_TOKEN_STORAGE_KEY: InjectionToken<string> = new InjectionToken<string>('accessAuthTokenStorageKey', {\n providedIn: 'root',\n factory: () => 'AccessAuth-Token',\n});\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен, указывающий ключ токена доступа гостя к API в {@link Storage}.\n */\nexport const SC_GUEST_TOKEN_STORAGE_KEY: InjectionToken<string> = new InjectionToken<string>('guestTokenStorageKey', {\n providedIn: 'root',\n factory: () => 'Guest-Token',\n});\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен, указывающий ключ для обновления ключа доступа к API в {@link Storage}.\n */\nexport const SC_REFRESH_AUTH_TOKEN_STORAGE_KEY: InjectionToken<string> = new InjectionToken<string>('refreshAuthTokenStorageKey', {\n providedIn: 'root',\n factory: () => 'RefreshAuth-Token',\n});\n","import { isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport { inject, InjectionToken, PLATFORM_ID } from '@angular/core';\nimport { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { Response } from 'express';\n\n/**\n * Токен для получения признака, что скрипт выполняется в браузере.\n */\nexport const IS_BROWSER = tuiCreateTokenFromFactory(() => isPlatformBrowser(inject(PLATFORM_ID)));\n\n/**\n * Токен для получения признака, что скрипт выполняется на сервере.\n */\nexport const IS_SERVER = tuiCreateTokenFromFactory(() => isPlatformServer(inject(PLATFORM_ID)));\n\n/**\n * Токен для получения данных об ответе на запрос.\n */\nexport const RESPONSE = new InjectionToken<Response>('RESPONSE');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIApiKeys } from '../config';\n\n/**\n * Токен внедрения заголовков ключей доступа к API.\n */\nexport const SC_API_KEYS: InjectionToken<ScIApiKeys> = new InjectionToken<ScIApiKeys>('IApiKeys');\n","import { HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { WA_LOCAL_STORAGE } from '@ng-web-apis/common';\nimport { filterByKey, StorageService, toValue, WA_STORAGE_EVENT } from '@ng-web-apis/storage';\nimport { Observable, startWith } from 'rxjs';\n\nimport { ScIApiKeys } from '../../config';\nimport { IS_BROWSER } from '../../providers/ssr.providers';\nimport { SC_API_KEYS } from '../../tokens/sc-api-keys';\nimport { IAuthToken, IToken } from '../interfaces';\nimport { SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_GUEST_TOKEN_STORAGE_KEY, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY } from '../tokens';\n\n/**\n * Сервис для работы с ключами аутентификации.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScTokenService {\n /**\n * {@link Observable} ключа доступа гостя к API в {@link Storage}.\n */\n public readonly guestToken$: Observable<string | null> = this.event$.pipe(filterByKey(this.guestStorageKey), toValue(), startWith(this.getGuestToken()));\n\n /**\n * {@link Observable} ключа доступа пользователя к API в {@link Storage}.\n */\n public readonly accessAuthToken$: Observable<string | null> = this.event$.pipe(filterByKey(this.accessAuthStorageKey), toValue(), startWith(this.getAccessToken()));\n\n /**\n * Инициализирует экземпляр класса {@link ScTokenService}.\n *\n * @param event$ {@link Observable} Событие изменения в {@link Storage}.\n * @param apiKeys Заголовки ключей доступа к API.\n * @param storageService Сервис для работы с {@link Storage} и внедрению его через DI.\n * @param guestStorageKey Токен, указывающий ключ токена доступа гостя к API в {@link Storage}.\n * @param accessAuthStorageKey Ключ доступа пользователя к API в {@link Storage}.\n * @param refreshAuthStorageKey Ключ обновления ключа доступа к API в {@link Storage}.\n * @param isBrowser Признак, что скрипт выполняется в браузере.\n * @param storage Хранилище {@link Storage}.\n */\n public constructor(\n @Inject(WA_STORAGE_EVENT) private readonly event$: Observable<StorageEvent>,\n @Inject(SC_API_KEYS) private readonly apiKeys: ScIApiKeys,\n @Inject(StorageService) private readonly storageService: Storage,\n @Inject(SC_GUEST_TOKEN_STORAGE_KEY) private readonly guestStorageKey: string,\n @Inject(SC_ACCESS_AUTH_TOKEN_STORAGE_KEY) private readonly accessAuthStorageKey: string,\n @Inject(SC_REFRESH_AUTH_TOKEN_STORAGE_KEY) private readonly refreshAuthStorageKey: string,\n @Inject(IS_BROWSER) private readonly isBrowser: boolean,\n @Optional() @Inject(WA_LOCAL_STORAGE) private readonly storage?: Storage\n ) {}\n\n /**\n * Возвращает ключ доступа к API.\n */\n public getAccessToken(): string | null {\n return this.storage && this.isBrowser ? this.storageService.getItem(this.accessAuthStorageKey) : null;\n }\n\n /**\n * Возвращает одноразовый ключ для обновления ключа доступа.\n */\n public getRefreshToken(): string | null {\n return this.storage && this.isBrowser ? this.storageService.getItem(this.refreshAuthStorageKey) : null;\n }\n\n // TODO Сохранять весь объект при добавлении функционала связанного с временем жизни ключа.\n /**\n * Устанавливает ключ доступа пользователя к API или ресурсу.\n *\n * @param token Ключ доступа пользователя к API или ресурсу.\n */\n public setAuthToken(token: IAuthToken): void {\n if (this.storage && this.isBrowser) {\n this.storageService.setItem(this.refreshAuthStorageKey, token.refresh.token);\n this.storageService.setItem(this.accessAuthStorageKey, token.access.token);\n }\n }\n\n /**\n * Удаляет ключ доступа пользователя к API или ресурсу.\n */\n public removeAuthToken(): void {\n if (this.getAccessToken()) {\n this.storageService.removeItem(this.refreshAuthStorageKey);\n this.storageService.removeItem(this.accessAuthStorageKey);\n }\n }\n\n /**\n * Возвращает ключ доступа пользователя к API или ресурсу в роли Гостя.\n */\n public getGuestToken(): string | null {\n return this.storage && this.isBrowser ? this.storageService.getItem(this.guestStorageKey) : null;\n }\n\n // TODO Сохранять весь объект при добавлении функционала связанного с временем жизни ключа.\n /**\n * Устанавливает ключ доступа пользователя к API или ресурсу в роли Гостя.\n *\n * @param tokenObject Ключ доступа пользователя к API или ресурсу в роли Гостя.\n */\n public setGuestToken(tokenObject: IToken): void {\n if (this.storage && this.isBrowser) {\n this.storageService.setItem(this.guestStorageKey, tokenObject.token);\n }\n }\n\n /**\n * Удаляет ключ доступа пользователя к API или ресурсу в роли Гостя.\n */\n public removeGuestToken(): void {\n if (this.getGuestToken()) {\n this.storageService.removeItem(this.guestStorageKey);\n }\n }\n\n /**\n * Добавляет в запрос заголовок для аутентификации пользователя или Гостя.\n *\n * @param request Данные запроса.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public addAuthHeader(request: HttpRequest<any>): HttpRequest<any> {\n if (this.getAccessToken() !== null) {\n return request.clone({ headers: request.headers.delete(this.apiKeys.guestKeyName).set(this.apiKeys.keyName, this.getAccessToken() ?? '') });\n }\n\n if (this.getGuestToken() !== null) {\n return request.clone({ headers: request.headers.delete(this.apiKeys.keyName).set(this.apiKeys.guestKeyName, this.getGuestToken() ?? '') });\n }\n\n return request.clone();\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { HttpContextToken } from '@angular/common/http';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { SC_IS_HEADER_REQUIRED } from './sc-is-header-required';\n\n/**\n * Токен, указывающий на необходимость добавления заголовка аутентификации приложения в исходящие запросы.\n * Нужен для того, чтобы регулировать заголовки аутентификации отдельно от остальных заголовков.\n *\n * Если указать `false`, то заголовки аутентификации будут проигнорированы при отправке запросов, не зависимо от значения {@link SC_IS_HEADER_REQUIRED}.\n */\nexport const SC_AUTH_ADD_HEADER_REQUIRED: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => true);\n","import { HttpContextToken } from '@angular/common/http';\n\n/**\n * Токен, указывающий, что выполняется запрос выхода из системы.\n */\nexport const SC_IS_LOGOUT_REQUEST: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => false);\n","import { HttpContextToken } from '@angular/common/http';\n\n/**\n * Токен, указывающий, что выполняется запрос на обновление ключей доступа.\n */\nexport const SC_IS_REFRESH_REQUIRED: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => false);\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Параметры авторизации под клиентом.\n */\nexport interface ScAuthAsClientOptions {\n /**\n * Сегменты URL-адресов для построения пути редиректа.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n urlTree: any[];\n\n /**\n * Количество минут жизни токена, до его обновления.\n */\n expiredAtMinute: number;\n}\n\n/**\n * Параметры по-умолчанию авторизации под клиентом.\n */\nexport const SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS: ScAuthAsClientOptions = {\n urlTree: ['/catalog'],\n expiredAtMinute: 2,\n};\n\n/**\n * Параметры авторизации под клиентом.\n */\nexport const SC_AUTH_AS_CLIENT_OPTIONS = tuiCreateToken(SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS);\n","import { InjectionToken } from '@angular/core';\n\nimport { ScICacheLifetime } from '../config';\n\n/**\n * Токен внедрения времени жизни данных.\n */\nexport const SC_CACHE_LIFETIME: InjectionToken<ScICacheLifetime> = new InjectionToken<ScICacheLifetime>('ICacheLifetime');\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен внедрения названия компании.\n */\nexport const SC_COMPANY_NAME: InjectionToken<string> = new InjectionToken<string>('COMPANY_NAME');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIConfiguratorBase, ScTypeByKey } from '../configurator';\n\n/**\n * Токен внедрения компонентов конфигураторов по их названию.\n */\nexport const SC_CONFIGURATOR_COMPONENTS: InjectionToken<ScTypeByKey<ScIConfiguratorBase>> = new InjectionToken<ScTypeByKey<ScIConfiguratorBase>>('SC_CONFIGURATOR_COMPONENTS');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIConfiguratorSettingsBase } from '../configurator';\nimport { ScTypeByKey } from '../configurator/types/sc-type-by-key';\n\n/**\n * Токен внедрения моделей настроек конфигураторов по их названию.\n */\nexport const SC_CONFIGURATOR_SETTINGS: InjectionToken<ScTypeByKey<ScIConfiguratorSettingsBase>> = new InjectionToken<ScTypeByKey<ScIConfiguratorSettingsBase>>(\n 'SC_CONFIGURATOR_SETTINGS'\n);\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIDefaultPageMeta } from '../config';\n\n/**\n * Токен внедрения мета-данных страницы по умолчанию.\n */\nexport const SC_DEFAULT_PAGE_META = tuiCreateToken<ScIDefaultPageMeta>();\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\n\n/**\n * Токен контекста запроса, указывающий на необходимость скрыть уведомление об ошибке.\n */\nexport const SC_IS_HIDDEN_ERROR_ALERT: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => false);\n\n/**\n * Контекст запроса, указывающий на необходимость скрыть уведомление об ошибке.\n */\nexport const SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT: HttpContext = new HttpContext().set(SC_IS_HIDDEN_ERROR_ALERT, true);\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Единицы измерения линейной величины по умолчанию.\n */\nexport const SC_LINEAR_VALUES: string[] = ['пог.м.', 'м.', 'м2'];\n\n/**\n * Токен единиц измерения линейной величины по умолчанию.\n */\nexport const SC_LINEAR_VALUES_TOKEN = tuiCreateToken(SC_LINEAR_VALUES);\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен внедрения пути до изображения 'Товар не найден'.\n */\nexport const SC_PATH_IMAGE_NOT_FOUND: InjectionToken<string> = new InjectionToken<string>('PATH_IMAGE_NOT_FOUND');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIAppRelease } from '../config';\n\n/**\n * Токен внедрения информации о релизе.\n */\nexport const SC_RELEASE: InjectionToken<ScIAppRelease> = new InjectionToken<ScIAppRelease>('IRelease');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIUpdateInterval } from '../config';\n\n/**\n * Токен внедрения интервалов обновления данных.\n */\nexport const SC_UPDATE_INTERVAL: InjectionToken<ScIUpdateInterval> = new InjectionToken<ScIUpdateInterval>('UPDATE_INTERVAL');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIUrls } from '../config';\n\n/**\n * Токен внедрения списка ссылок приложения.\n */\nexport const SC_URLS: InjectionToken<ScIUrls> = new InjectionToken<ScIUrls>('IUrls');\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIFeedbackAPI } from '../config/sc-i-feedback-api';\n\n/**\n * Токен внедрения данных API обратной связи.\n */\nexport const SC_FEEDBACK_API: InjectionToken<ScIFeedbackAPI> = tuiCreateToken<ScIFeedbackAPI>();\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIDateFormat } from '../config/sc-i-date-format';\n\n/**\n * Токен внедрения формата дат.\n */\nexport const SC_DATE_FORMAT: InjectionToken<ScIDateFormat> = tuiCreateToken<ScIDateFormat>();\n","/**\n * Перечисление названий целей метрики используемых для отслеживания действий пользователей.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScUserMetrikaGoalsEnum {\n /**\n * Выполнен клик по баннеру.\n *\n * В качестве параметра должен быть указан идентификатор баннера (параметр \"banner_id\").\n */\n bannerClick = 'BANNER_CLICK',\n\n /**\n * Корзина очищена.\n */\n cartCleared = 'CART_CLEARED',\n\n /**\n * Пользователь добавил товар в корзину.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n cartItemAdded = 'CART_ITEM_ADDED',\n\n /**\n * Пользователь удалил товар из корзины.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n cartItemDeleted = 'CART_ITEM_DELETED',\n\n /**\n * Открыто диалоговое окно/страница добавления товара в корзину.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n cartItemAddShow = 'CART_ITEM_ADD_SHOW',\n\n /**\n * Пользователь добавил товар в корзину из рекомендаций.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n cartItemAddedFromRecommendations = 'CART_ITEM_ADDED_FROM_RECOMMENDATION',\n\n /**\n * Открыто диалоговое окно/страница со списком товаров в корзине.\n */\n cartShow = 'CART_SHOW',\n\n /**\n * Выполнено скачивание прайс-листа.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор категории для которой скачивается прайс-лист (параметр \"category_id\");\n * - тип скачиваемого прайс-листа (параметр \"price_type\").\n */\n catalogPriceDownload = 'CATALOG_PRICE_DOWNLOAD',\n\n /**\n * Выполнен поиск по каталогу.\n *\n * В качестве параметров должны быть указаны:\n * - тип поиска (параметр \"search_type\");\n * - терм поиска (параметр \"search_term\").\n */\n catalogSearch = 'CATALOG_SEARCH',\n\n /**\n * Открыто диалоговое окно/страница настроек каталога товаров.\n *\n * В качестве параметра должен быть указан идентификатор клиента (параметр \"uid\").\n */\n catalogSettingsShow = 'CATALOG_SETTINGS_SHOW',\n\n /**\n * Отправлено сообщение по обратной связи.\n */\n feedbackSent = 'FEEDBACK_SENT',\n\n /**\n * Открыто диалоговое окно/страница обратной связи.\n */\n feedbackShow = 'FEEDBACK_SHOW',\n\n /**\n * Выполнен клик по маркеру карты.\n *\n * В качестве параметров должно быть указано название маркера (параметр \"map_point_name\").\n */\n mapPointClick = 'MAP_POINT_CLICK',\n\n /**\n * Открыто диалоговое окно/страница с картой.\n */\n mapShow = 'MAP_SHOW',\n\n /**\n * Открыто диалоговое окно/страница с уведомлениями.\n */\n notificationsShow = 'NOTIFICATIONS_SHOW',\n\n /**\n * Заказ отменён.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор заказа (параметр \"order_id\");\n * - стоимость заказа (параметр \"cost\").\n */\n orderCancelled = 'ORDER_CANCELLED',\n\n /**\n * Заказ клонирован из другого заказа.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор исходного заказа (параметр \"order_id\");\n * - стоимость заказа (параметр \"cost\").\n */\n orderCloned = 'ORDER_CLONED',\n\n /**\n * Создан заказ.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор заказа (параметр \"order_id\", не передаётся для новой/неопределённой записи);\n * - стоимость заказа (параметр \"cost\").\n */\n orderCreated = 'ORDER_CREATED',\n\n /**\n * Заказ создан из черновика заказа.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор исходного заказа (параметр \"order_id\");\n * - стоимость заказа (параметр \"cost\").\n */\n orderCreatedFromDraft = 'ORDER_CREATED_FROM_DRAFT',\n\n /**\n * Заказ удалён.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор заказа (параметр \"order_id\");\n * - признак, что заказ является черновиком (параметр \"is_draft\");\n * - стоимость заказа (параметр \"cost\").\n */\n orderDeleted = 'ORDER_DELETED',\n\n /**\n * Открыто диалоговое окно/страница конфигуратора товара.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n productConfiguratorShow = 'PRODUCT_CONFIGURATOR_SHOW',\n\n /**\n * Открыто диалоговое окно/страница с подробным описанием товара.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n productInfoShow = 'PRODUCT_INFO_SHOW',\n\n /**\n * Выполнен клик по карте/графическому представлению товаров.\n *\n * В качестве параметра должен быть указан идентификатор логической группы товаров на карте (параметр \"virtual_group_id\" или \"virtual_group_name\").\n */\n productMapClick = 'PRODUCT_MAP_CLICK',\n\n /**\n * Выполнен клик по логической группе товаров.\n *\n * В качестве параметров должно быть указано откуда был произведен переход (from_location) и идентификатор логической группы товаров (параметр \"virtual_group_id\").\n */\n productVirtualGroupClick = 'PRODUCT_VIRTUAL_GROUP_CLICK',\n\n /**\n * Открыто диалоговое окно/страница истории изменения цен на товар.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n productPriceHistoryShow = 'PRODUCT_PRICE_HISTORY_SHOW',\n\n /**\n * Открыто диалоговое окно/страница с QR-кодом.\n *\n * В качестве параметров должно быть указано название открытого QR-кода (параметр \"qr_name\").\n */\n qrShow = 'QR_SHOW',\n\n /**\n * Пользователь ответил на опросник.\n */\n questionnaireAnswered = 'QUESTIONNAIRE_ANSWERED',\n\n /**\n * Открыто диалоговое окно/страница опросника.\n *\n * В качестве параметра должен быть указан идентификатор опроса (параметр \"questionnaire_id\").\n */\n questionnaireShow = 'QUESTIONNAIRE_SHOW',\n\n /**\n * Открыто диалоговое окно/страница добавления рекламации.\n *\n * В качестве параметра должен быть указан идентификатор рекламации (параметр \"reclamation_id\", не передаётся для новой записи).\n */\n reclamationAddShow = 'RECLAMATION_ADD_SHOW',\n\n /**\n * Код восстановления пароля отправлен.\n */\n recoverPasswordCodeSent = 'RECOVER_PASSWORD_CODE_SENT',\n\n /**\n * Открыто диалоговое окно/страница кода восстановления пароля.\n */\n recoverPasswordSendCodeShow = 'RECOVER_PASSWORD_SEND_CODE_SHOW',\n\n /**\n * Открыто диалоговое окно/страница восстановления пароля.\n */\n recoverPasswordShow = 'RECOVER_PASSWORD_SHOW',\n\n /**\n * Выполнен клик по одной из ссылок \"Поделиться\".\n *\n * В качестве параметров должно быть указано по какой именно ссылке произведён клик (параметр \"share_link_name\").\n */\n shareClick = 'SHARE_CLICK',\n\n /**\n * Открыто диалоговое окно/страница \"Поделиться\".\n */\n shareShow = 'SHARE_SHOW',\n\n /**\n * Пользователь вошёл в систему.\n *\n * В качестве параметра должен быть указан тип используемого входа (параметр \"sign_in_type\").\n */\n signedIn = 'SIGNED_IN',\n\n /**\n * Открыто диалоговое окно/страница входа в систему.\n */\n signInShow = 'SIGN_IN_SHOW',\n\n /**\n * Пользователь вышел из системы.\n */\n signedOut = 'SIGNED_OUT',\n\n /**\n * Пользователь завершил регистрацию.\n */\n signedUp = 'SIGNED_UP',\n\n /**\n * Пользователь нажал \"Показать еще ХХ товаров\".\n *\n * В качестве параметра должен быть указан идентификатор категории (параметр \"category_id\").\n */\n showMoreClick = 'SHOW_MORE_CLICK',\n\n /**\n * Открыто диалоговое окно/страница регистрации.\n */\n signUpShow = 'SIGN_UP_SHOW',\n\n /**\n * Открыто диалоговое окно/страница упрощенной регистрации.\n */\n simpleSsignUpShow = 'SIMPLE_SIGN_UP_SHOW',\n\n /**\n * Открыто диалоговое окно/страница подтверждения номера телефона пользователя.\n */\n userProfileApprovePhoneShow = 'USER_PROFILE_APPROVE_PHONE_SHOW',\n\n /**\n * Открыто диалоговое окно/страница редактирования профиля пользователя.\n */\n userProfileEditShow = 'USER_PROFILE_EDIT_SHOW',\n\n /**\n * Пользователь отредактировал профиль.\n */\n userProfileEdited = 'USER_PROFILE_EDITED',\n\n /**\n * Пользователь добавил данные о контактах.\n */\n userProfileContactAdded = 'USER_PROFILE_CONTACT_ADDED',\n\n /**\n * Открыто диалоговое окно/страница добавления данных о контактах.\n */\n userProfileContactAddShow = 'USER_PROFILE_CONTACT_ADD_SHOW',\n\n /**\n * Пользователь добавил данные о контрагенте.\n */\n userProfileContragentAdded = 'USER_PROFILE_CONTRAGENT_ADDED',\n\n /**\n * Открыто диалоговое окно/страница добавления данных о контрагенте.\n */\n userProfileContragentAddShow = 'USER_PROFILE_CONTRAGENT_ADD_SHOW',\n\n /**\n * Пользователь удалил данные о контрагенте.\n *\n * В качестве параметра должен быть указан идентификатор контрагента (параметр \"contragent_id\", не передаётся для новой записи).\n */\n userProfileContragentDeleted = 'USER_PROFILE_CONTRAGENT_DELETED',\n\n /**\n * Пользователь добавил данные об адресе доставки.\n */\n userProfileDeliveryAddressAdded = 'USER_PROFILE_DELIVERY_ADDRESS_ADDED',\n\n /**\n * Открыто диалоговое окно/страница добавления или редактирования данных об адресе доставки.\n */\n userProfileDeliveryAddressAddShow = 'USER_PROFILE_DELIVERY_ADDRESS_ADD_SHOW',\n\n /**\n * Пользователь удалил данные об адресе доставки.\n *\n * В качестве параметра должен быть указан идентификатор адреса доставки (параметр \"delivery_address_id\", не передаётся для новой записи).\n */\n userProfileDeliveryAddressDeleted = 'USER_PROFILE_DELIVERY_ADDRESS_DELETED',\n\n /**\n * Выполнен клик по вакансии.\n *\n * В качестве параметра должен быть указан идентификатор вакансии (параметр \"vacancy_id\" или \"vacancy_name\").\n */\n vacancyClick = 'VACANCY_CLICK',\n\n /**\n * Открыто диалоговое окно/страница вакансий.\n */\n vacancyShow = 'VACANCY_SHOW',\n\n /**\n * Выполнен клик по номеру телефона.\n *\n * В качестве параметра должен быть указан номер телефона (параметр \"phone\") и условное название блока где он расположен (параметр \"phone_location\").\n */\n phoneClick = 'PHONE_CLICK',\n\n /**\n * Выполнен клик по адресу электронной почты.\n *\n * В качестве параметра должен быть указан адрес электронной почты (параметр \"email\") и условное название блока где он расположен (параметр \"email_location\").\n */\n emailClick = 'EMAIL_CLICK',\n\n /**\n * Добавлены товары в корзину из файла CSV.\n */\n cartCsvUpload = 'CART_CSV_UPLOAD',\n}\n","/**\n * Перечисление типов пользователя.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScUserType {\n /**\n * Гость (неавторизованный пользователь).\n */\n guest = 'guest',\n\n /**\n * Клиент.\n */\n client = 'client',\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { ScUserType } from '../../user/enums/sc-user-type';\nimport { ScIUserMetrikaEvent } from '../dto';\n\n/**\n * Сервис для сбора метрик о действиях пользователей.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUserMetrikaService {\n /**\n * {@link Subject} событий сбора метрик.\n */\n private readonly handler$ = new Subject<ScIUserMetrikaEvent>();\n\n /**\n * Дополнительные параметры произошедшего события.\n */\n private additionalParams: Record<string, any> = {};\n\n /**\n * Генерирует событие с данными о действии пользователя.\n *\n * @param event Данные о произошедшем событии.\n */\n public emitUserMetrikaEvent(event: ScIUserMetrikaEvent): void {\n // Создаём копию объекта, чтобы иметь возможность дополнить его общими данными.\n this.handler$.next({\n target: event.target,\n params: { ...event.params, ...this.additionalParams },\n });\n }\n\n /**\n * Возвращает {@link Observable} для отслеживания событий метрик.\n */\n public getObservable$(): Observable<ScIUserMetrikaEvent> {\n return this.handler$.asObservable();\n }\n\n /**\n * Устанавливает параметры текущего пользователя.\n *\n * @param userId Идентификатор пользователя.\n * @param userType Тип пользователя.\n */\n public setUserParams(userId?: number, userType: ScUserType = ScUserType.guest): void {\n this.additionalParams['user_type'] = userType;\n\n if (userId) {\n this.additionalParams['user_id'] = userId;\n } else {\n delete this.additionalParams['user_id'];\n }\n }\n\n /**\n * Добавляет дополнительный общий параметр, отправляемый при каждом событии метрики.\n *\n * @param name Название параметра.\n * @param value Значение параметра.\n */\n public addCommonParam(name: string, value: any): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,security/detect-object-injection\n this.additionalParams[name] = value;\n }\n}\n","/* eslint-disable @typescript-eslint/unified-signatures */\n\nimport { HttpClient, HttpContext, HttpHeaders } from '@angular/common/http';\nimport { Inject, inject, Injectable } from '@angular/core';\nimport { combineLatest, debounceTime, map, Observable, of, partition, ReplaySubject, switchMap, tap } from 'rxjs';\n\nimport { ScIApiKeys } from '../../config/sc-i-api-keys';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { SC_AUTH_ADD_HEADER_REQUIRED } from '../../httpInterceptors/tokens/sc-auth-add-header-required';\nimport { SC_IS_LOGOUT_REQUEST } from '../../httpInterceptors/tokens/sc-is-logout-request';\nimport { SC_IS_REFRESH_REQUIRED } from '../../httpInterceptors/tokens/sc-is-refresh-token-required';\nimport { IS_SERVER } from '../../providers/ssr.providers';\nimport { SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT } from '../../tokens';\nimport { SC_API_KEYS } from '../../tokens/sc-api-keys';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { IAuthToken, ILogin, IPhoneLogin, IToken } from '../interfaces';\nimport { ScTokenService } from './sc-token.service';\n\n/**\n * Сервис аутентификации пользователей.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScAuthService {\n /**\n * {@link ReplaySubject} для событийной модели сервиса аутентификации.\n */\n private authSubject: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\n\n /**\n * Признак, что скрипт выполняется на сервере.\n */\n private readonly isServer: boolean = inject(IS_SERVER);\n\n /**\n * Инициализирует экземпляр класса {@link ScAuthService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n * @param apiKeys Заголовки ключей доступа к API.\n * @param tokenService Сервис ключей аутентификации.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n @Inject(SC_API_KEYS) private readonly apiKeys: ScIApiKeys,\n private readonly tokenService: ScTokenService,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {\n const [authState$, actions$] = partition(\n combineLatest({\n access: this.tokenService.accessAuthToken$.pipe(map((token) => token !== null)),\n guest: this.tokenService.guestToken$.pipe(map((token) => token !== null)),\n }).pipe(debounceTime(0)), // Исправляет ошибку одновременного удаления ключа гостя и ключа пользователя. Возникает при очистке Storage.\n ({ access, guest }) => (access && !guest) || (!access && guest)\n );\n authState$.subscribe(({ access }) => {\n this.authSubject.next(access);\n });\n actions$\n .pipe(\n switchMap(({ access }) => {\n if (access) {\n this.tokenService.removeGuestToken();\n\n return of(null);\n }\n\n return this.getGuestToken$();\n })\n )\n .subscribe();\n\n if (this.isServer) {\n this.authSubject.next(false);\n }\n }\n\n /**\n * Возвращает {@link Observable} состояния аутентификации, чтобы реагировать на изменения.\n */\n public getAuthChange(): Observable<boolean> {\n return this.authSubject.asObservable();\n }\n\n /**\n * Возвращает {@link Observable} запроса аутентификации пользователя.\n *\n * @param user Данные для аутентификации пользователя по email.\n */\n public getSignIn$(user: ILogin): Observable<IAuthToken>;\n\n /**\n * Возвращает {@link Observable} запроса аутентификации пользователя.\n *\n * @param user Данные для аутентификации пользователя по номеру телефона.\n */\n public getSignIn$(user: IPhoneLogin): Observable<IAuthToken>;\n\n /**\n * Возвращает {@link Observable} запроса аутентификации пользователя.\n *\n * @param user Данные о пользователе для аутентификации.\n */\n public getSignIn$(user: ILogin | IPhoneLogin): Observable<IAuthToken> {\n return this.http.post<IAuthToken>(`${this.urls.apiUrl}/auth/login`, user).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signedIn,\n params: { sign_in_type: 'password' in user ? 'login/password' : 'phone/code' },\n });\n }),\n tap((tokensObject: IAuthToken) => {\n this.tokenService.setAuthToken(tokensObject);\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса завершения аутентификации пользователя.\n *\n * @param removeAuthToken Признак, что необходимо удалить ключ аутентификации.\n */\n public getSignOut$(removeAuthToken: boolean = true): Observable<undefined> {\n return this.http\n .post<undefined>(\n `${this.urls.apiUrl}/auth/logout`,\n {},\n {\n context: new HttpContext().set(SC_IS_LOGOUT_REQUEST, true).set(SC_IS_HIDDEN_ERROR_ALERT, true),\n }\n )\n .pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signedOut,\n });\n\n if (removeAuthToken) {\n this.tokenService.removeAuthToken();\n }\n })\n );\n }\n\n /**\n * Выполняет запрос завершения аутентификации пользователя.\n */\n public signOut(): void {\n this.getSignOut$().subscribe();\n }\n\n /**\n * Возвращает {@link Observable} запроса повторной аутентификации пользователя и обновления ключа аутентификации.\n *\n * @param refreshTokens Ключи доступа к API, и обновления сессии доступа к API. Если ключи не переданы, берёт их из {@link Storage}.\n */\n public getRefreshToken$(refreshTokens?: IAuthToken): Observable<IAuthToken> {\n const refreshToken = refreshTokens?.refresh.token ?? this.tokenService.getRefreshToken();\n const requestOptions = refreshTokens\n ? {\n headers: new HttpHeaders().set(this.apiKeys.keyName, refreshTokens.access.token),\n context: new HttpContext().set(SC_IS_REFRESH_REQUIRED, true).set(SC_IS_HIDDEN_ERROR_ALERT, true).set(SC_AUTH_ADD_HEADER_REQUIRED, false),\n }\n : {\n context: new HttpContext().set(SC_IS_REFRESH_REQUIRED, true).set(SC_IS_HIDDEN_ERROR_ALERT, true),\n };\n\n return this.http.patch<IAuthToken>(`${this.urls.apiUrl}/auth/token`, { refresh_token: refreshToken }, requestOptions).pipe(\n tap((tokens: IAuthToken) => {\n this.tokenService.setAuthToken(tokens);\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса получения гостевого ключа.\n */\n public getGuestToken$(): Observable<IToken> {\n return this.http\n .get<IToken>(`${this.urls.apiUrl}/auth/guest/token`, {\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(\n tap((token: IToken) => {\n this.tokenService.setGuestToken(token);\n })\n );\n }\n}\n","import { ScIBanner } from './sc-i-banner';\n\n/**\n * Данные баннера.\n */\nexport class ScBanner implements ScIBanner {\n /**\n * Идентификатор баннера.\n */\n public id: number;\n\n /**\n * Местоположения баннера на странице пользователя.\n */\n public location: string;\n\n /**\n * Тип медиафайла.\n */\n public mediaType: 'image' | 'video';\n\n /**\n * Относительный путь к медиафайлу баннера.\n */\n public mediaFile: string;\n\n /**\n * Относительный путь к медиафайлу баннера в формате WebP.\n */\n public mediaFileWebp?: string;\n\n /**\n * Заголовок баннера.\n */\n public title: string;\n\n /**\n * Ссылка, на которую должен вести баннер.\n */\n public url: string;\n\n /**\n * Ширина баннера в px.\n */\n public width: number;\n\n /**\n * Высота баннера в px.\n */\n public height: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScBanner}.\n *\n * @param bannerDTO Данные для инициализации.\n */\n public constructor(bannerDTO: ScIBanner) {\n this.id = bannerDTO.id;\n this.location = bannerDTO.location;\n this.mediaType = bannerDTO.mediaType;\n this.mediaFile = bannerDTO.mediaFile;\n this.mediaFileWebp = bannerDTO.mediaFileWebp;\n this.title = bannerDTO.title;\n this.url = bannerDTO.url;\n this.width = bannerDTO.width;\n this.height = bannerDTO.height;\n }\n\n /**\n * Возвращает признак того, что баннер является изображением.\n */\n public get isImage(): boolean {\n return this.mediaType === 'image';\n }\n\n /**\n * Возвращает признак того, что баннер является видео.\n */\n public get isVideo(): boolean {\n return this.mediaType === 'video';\n }\n}\n","/**\n * Перечисление типов клиента.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScClientType {\n /**\n * Физическое лицо.\n */\n person = 'person',\n\n /**\n * Индивидуальный предприниматель.\n */\n ic = 'ic',\n\n /**\n * Юридическое лицо.\n */\n org = 'org',\n}\n","import { ScClientType, ScUserType } from '../enums';\nimport { ScIUserDTO } from '../internal/dto';\nimport { ScApprovedData } from './sc-approved-data';\nimport { ScIManager } from './sc-i-manager';\nimport { ScUserMetadata } from './sc-user-metadata';\n\n/**\n * Модель данных пользователя.\n */\nexport class ScUser {\n /**\n * Идентификатор пользователя.\n */\n public id: number;\n\n /**\n * Ф.И.О. пользователя.\n */\n public name: string;\n\n /**\n * Тип пользователя.\n */\n public userType?: ScUserType;\n\n /**\n * Тип клиента.\n */\n public clientType?: ScClientType;\n\n /**\n * Данные о возможных способах связи.\n */\n public contacts: {\n /**\n * Адрес электронной почты.\n */\n email: ScApprovedData;\n\n /**\n * Номер телефона. В формате \"79203436527\" или \"+79203436527\".\n */\n phone: ScApprovedData;\n };\n\n /**\n * Дата регистрации пользователя.\n */\n public createdAt: string;\n\n /**\n * URI путь к фотографии пользователя.\n */\n public photo?: string;\n\n /**\n * Признак необходимости получения новостей.\n */\n public getNews: boolean;\n\n /**\n * Направление продаж.\n */\n public direction: number = 1;\n\n /**\n * Метаданные (дополнительные данные, используемые в процессе функционирования системы) в свободной форме.\n */\n public metadata: Partial<ScUserMetadata>;\n\n /**\n * Список менеджеров клиента.\n */\n public managers?: ScIManager[];\n\n /**\n * Идентификатор записи города.\n */\n public city?: number;\n\n /**\n * Дата последнего изменения прайс-листа.\n */\n public priceDate?: string;\n\n /**\n * Данные о задолженности/переплате.\n */\n public debt?: number;\n\n /**\n * Идентификатор региона пользователя.\n */\n public region?: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScUser}.\n *\n * @param userDTO DTO с данными о пользователе.\n */\n public constructor(userDTO: ScIUserDTO | Pick<ScIUserDTO, 'metadata'>) {\n if ('id' in userDTO) {\n this.id = userDTO.id;\n this.name = userDTO.name;\n this.userType = userDTO.userType ?? ScUserType.guest;\n this.clientType = userDTO.clientType ?? ScClientType.person;\n\n // eslint-disable-next-line no-param-reassign\n userDTO.contacts.phone.value = userDTO.contacts.phone.value.startsWith('+') ? userDTO.contacts.phone.value : `+${userDTO.contacts.phone.value}`;\n\n this.contacts = userDTO.contacts;\n this.createdAt = userDTO.createdAt;\n this.getNews = userDTO.getNews;\n this.direction = userDTO.direction;\n this.metadata = userDTO.metadata;\n this.managers = userDTO.managers;\n this.city = userDTO.city;\n this.priceDate = userDTO.priceDate;\n this.debt = userDTO.debt;\n this.region = userDTO.region;\n } else {\n this.userType = ScUserType.guest;\n this.metadata = userDTO.metadata;\n }\n }\n\n /**\n * Признак того, что пользователь является юр. лицом.\n */\n public get isOrg(): boolean {\n return this.clientType === ScClientType.org;\n }\n\n /**\n * Признак того, что пользователь является гостем.\n */\n public get isGuest(): boolean {\n return this.userType === ScUserType.guest;\n }\n\n /**\n * Округлённая задолженность. В шаблоне не определён {@link Math}.\n */\n public get absDebt(): number {\n return Math.abs(this.debt ?? 0);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { WA_LOCAL_STORAGE } from '@ng-web-apis/common';\nimport { filterByKey, StorageService, toValue, WA_STORAGE_EVENT } from '@ng-web-apis/storage';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { filter, map, Observable, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\nimport { IAuthToken } from '../../auth/interfaces';\nimport { ScAuthService } from '../../auth/services/sc-auth.service';\nimport { ScTokenService } from '../../auth/services/sc-token.service';\nimport { IS_BROWSER } from '../../providers/ssr.providers';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScISimpleUserOnDataCreate } from '../dto';\nimport { ScIChangePassword } from '../dto/sc-i-change-password';\nimport { ScIPasswordOnDataUpdate } from '../dto/sc-i-password-on-data-create';\nimport { ScIPhoneOnDataApprove } from '../dto/sc-i-phone-on-data-approve';\nimport { ScIUserOnDataCreate } from '../dto/sc-i-user-on-data-create';\nimport { ScIUserOnDataUpdate } from '../dto/sc-i-user-on-data-update';\nimport { ScUser } from '../dto/sc-user';\nimport { ScIUserDTO } from '../internal/dto';\n\n/**\n * Сервис информации о пользователе.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUserService {\n /**\n * {@link Observable} Событие изменения в {@link Storage}.\n */\n private readonly storageEvent$: Observable<StorageEvent> = inject(WA_STORAGE_EVENT);\n\n /**\n * Сервис для работы с {@link Storage}.\n */\n private readonly storageService: Storage = inject(StorageService);\n\n /**\n * {@link Storage}.\n */\n private readonly storage: Storage | null = inject(WA_LOCAL_STORAGE, { optional: true });\n\n /**\n * Признак, что скрипт выполняется в браузере.\n */\n private readonly isBrowser: boolean = inject(IS_BROWSER);\n\n /**\n * {@link Observable} ключа доступа пользователя к API в {@link Storage}.\n */\n private readonly user$: Observable<ScUser> = this.storageEvent$.pipe(\n filterByKey('userData'),\n toValue(),\n map((userData) => (userData ? new ScUser(JSON.parse(userData) as ScIUserDTO) : null)),\n startWith(this.storage && this.isBrowser ? null : new ScUser({ metadata: {} })), // Инициализация пользователя при SSR для корректной работы связанных сервисов.\n filter(tuiIsPresent),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n\n /**\n * Сервис для работы с токенами.\n */\n private readonly tokenService = inject(ScTokenService);\n\n /**\n * Сервис аутентификации.\n */\n private readonly authService = inject(ScAuthService);\n\n /**\n * Список ссылок на разделы backend'a.\n */\n private readonly urls = inject(SC_URLS);\n\n /**\n * HTTP-клиент.\n */\n private readonly http = inject(HttpClient);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Выполняет инициализацию сервиса.\n */\n public initService(): void {\n if (this.isBrowser) {\n this.authService\n .getAuthChange()\n .pipe(switchMap((state) => (state ? this.getUserInfo$() : this.getGuestInfo$())))\n .subscribe((user) => {\n this.userMetrikaService.setUserParams(user.id, user.userType);\n this.setUserToStorage(user);\n });\n } else {\n this.setUserToStorage(new ScUser({ metadata: {} }));\n }\n }\n\n /**\n * Устанавливает данные пользователя в {@link Storage}.\n *\n * @param user Данные пользователя.\n */\n private setUserToStorage(user: ScUser): void {\n if (this.storage && this.isBrowser) {\n this.storageService.setItem('userData', JSON.stringify(user));\n }\n }\n\n /**\n * Возвращает {@link Observable} запроса изменения информации о текущем пользователе.\n *\n * @param newData Данные пользователя, которые нужно обновить.\n */\n public updateUserInfo$(newData: ScIUserOnDataUpdate | ScIChangePassword | ScIPhoneOnDataApprove): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/user`, newData).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileEdited,\n });\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса изменения информации о текущем пользователе-госте.\n *\n * @param newData Данные пользователя-гостя, которые нужно обновить.\n */\n public updateGuestInfo$(newData: Pick<ScIUserOnDataUpdate, 'metadata'>): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/guest`, newData);\n }\n\n /**\n * Возвращает {@link Observable} запроса регистрации пользователя.\n *\n * @param user Данные для регистрации.\n * @param withAuth Флаг, указывающий, нужно ли устанавливать токен аутентификации.\n */\n public signUp$(user: ScIUserOnDataCreate | ScISimpleUserOnDataCreate, withAuth: boolean = true): Observable<IAuthToken> {\n return this.http.post<IAuthToken>(`${this.urls.apiUrl}/user/register`, user).pipe(\n tap((token) => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signedUp,\n });\n\n if (withAuth) {\n this.tokenService.setAuthToken(token);\n }\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса на отправку кода изменения пароля на электронную почту.\n *\n * @param email Адрес электронной почты.\n */\n public sendResetPasswordCode$(email: string): Observable<undefined> {\n return this.http.get<undefined>(`${this.urls.apiUrl}/auth/password/restore`, { params: { email: email } });\n }\n\n /**\n * Возвращает {@link Observable} запроса изменения пароля.\n *\n * @param newPassword Данные для изменения пароля.\n */\n public resetPassword$(newPassword: ScIPasswordOnDataUpdate): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/auth/password/restore`, newPassword);\n }\n\n /**\n * Возвращает {@link Observable} текущего пользователя.\n */\n public getUserChange$(): Observable<ScUser> {\n return this.user$;\n }\n\n /**\n * Обновляет данные {@link Observable} текущего пользователя.\n */\n public updateUserChange$(): Observable<ScUser> {\n return this.getUserInfo$().pipe(\n tap((user) => {\n this.setUserToStorage(user);\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса на получение информации о текущем пользователе.\n */\n public getUserInfo$(): Observable<ScUser> {\n return this.http.get<ScIUserDTO>(`${this.urls.apiUrl}/user`).pipe(map((user) => new ScUser(user)));\n }\n\n /**\n * Обновляет данные {@link Observable} текущего пользователя.\n */\n public updateGuestChange$(): Observable<ScUser> {\n return this.getGuestInfo$().pipe(\n tap((user) => {\n this.setUserToStorage(user);\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса на получение информации о текущем пользователе.\n */\n private getGuestInfo$(): Observable<ScUser> {\n return this.http.get<ScIUserDTO>(`${this.urls.apiUrl}/guest`).pipe(map((user) => new ScUser(user)));\n }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { distinctUntilChanged, Observable } from 'rxjs';\n\nimport { ScUser } from '../dto/sc-user';\nimport { ScUserService } from '../services/sc-user.service';\n\n/**\n * Токен потока данных о текущем пользователе.\n */\nexport const SC_USER_INFO: InjectionToken<Observable<ScUser>> = tuiCreateTokenFromFactory(() =>\n inject(ScUserService)\n .getUserChange$()\n .pipe(\n distinctUntilChanged((previous, current) => !current.isGuest && previous.id === current.id),\n takeUntilDestroyed()\n )\n);\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, Observable, shareReplay, switchMap } from 'rxjs';\n\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScBanner } from '../dto/sc-banner';\nimport { ScIBanner } from '../dto/sc-i-banner';\n\n/**\n * Сервис для работы с баннерами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScBannerService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Список баннеров.\n */\n public readonly banners$: Observable<ScBanner[]> = inject(SC_USER_INFO).pipe(\n switchMap(() => this.http.get<ScIBanner[]>(`${this.urls.apiUrl}/banners`)),\n map((banners) => banners.map((banner) => new ScBanner(banner))),\n shareReplay(1)\n );\n}\n","export const EMPTY_CART = { items: [], result_sum: { rub: 0 }, directions_sum: {} };\n","/**\n * Модель данных итоговой суммы.\n */\nexport class ScSum {\n /**\n * Инициализирует экземпляр класса {@link ScSum}.\n *\n * @param rub Итоговая сумма в рублях.\n */\n public constructor(public rub: number = 0) {}\n}\n","import { ScISeoResourceDTO } from '../internal/sc-i-seo-resource-dto';\nimport { ScISeo } from './sc-i-seo';\nimport { ScISeoResource } from './sc-i-seo-resource';\n\n/**\n * Модель данных объекта имеющего SEO данные.\n */\nexport class ScSeoResource implements ScISeoResource {\n /**\n * SEO данные.\n */\n public seo?: ScISeo;\n\n /**\n * Ссылка на основное изображение.\n */\n public image?: string;\n\n /**\n * Инициализирует экземпляр класса {@link ScSeoResource}.\n *\n * @param seoResourceDTO Данные для инициализации.\n */\n public constructor(seoResourceDTO: ScISeoResource | ScISeoResourceDTO | null | undefined) {\n if (!seoResourceDTO) {\n return;\n }\n\n if ('_Seo' in seoResourceDTO) {\n // eslint-disable-next-line no-underscore-dangle\n this.seo = seoResourceDTO._Seo;\n } else if ('seo' in seoResourceDTO) {\n this.seo = seoResourceDTO.seo;\n }\n }\n}\n","/* eslint-disable no-use-before-define */\nimport { ScIConfiguratorSettingsBase } from '../../configurator/dto/sc-i-configurator-settings-base';\nimport { ScICategoryDTO } from '../internal/sc-i-category-dto';\nimport { ScIFilterTreeCategory } from '../internal/sc-i-filter-tree-category';\nimport { ScIProperties } from './sc-i-properties';\nimport { ScProduct } from './sc-product';\nimport { ScSeoResource } from './sc-seo-resource';\n\n/**\n * Модель данных категории товаров.\n */\nexport class ScCategory extends ScSeoResource implements ScICategoryDTO {\n /**\n * Признак, что категория является избранной для клиента.\n *\n * @deprecated\n */\n public get isFavorite(): boolean {\n return this.isFavoriteValue;\n }\n\n /**\n * Идентификатор категории.\n */\n public id: number;\n\n /**\n * Символьное обозначение (slug) категории.\n */\n public slug: string;\n\n /**\n * Название категории.\n */\n public name: string;\n\n /**\n * Признак того, что категория является основной для некоторого товара или услуги.\n */\n public isPrimary?: boolean;\n\n /**\n * Список свойств. Число свойств в объекте не ограничено.\n */\n public properties?: ScIProperties;\n\n /**\n * Объект родительской категории.\n */\n public parentCategory?: ScCategory;\n\n /**\n * Список дочерних категорий.\n */\n public categories?: ScCategory[];\n\n /**\n * Признак наличия дочерних категорий.\n */\n public hasChild?: boolean;\n\n /**\n * Дата загрузки категории.\n *\n * @deprecated\n */\n public loadedAt?: Date;\n\n /**\n * Признак, что информация о категории загружается.\n *\n * @deprecated\n */\n public isLoading: boolean = false;\n\n /**\n * Список товаров в категории.\n */\n public products?: ScProduct[];\n\n /**\n * Настройки конфигуратора.\n */\n public configuratorSettings?: ScIConfiguratorSettingsBase;\n\n /**\n * Признак, что в категории необходимо отобразить конфигуратор.\n */\n public showConfigurator?: boolean;\n\n /**\n * Фильтры категории древовидного представления каталога.\n *\n * @deprecated\n */\n public filter?: ScIFilterTreeCategory | '*' = '*';\n\n /**\n * Признак, что категория является скелетоном.\n *\n * @deprecated\n */\n public isSkeleton: boolean = false;\n\n /**\n * Признак, что категория является избранной для клиента.\n */\n private isFavoriteValue: boolean;\n\n /**\n * Инициализирует экземпляр класса {@link ScCategory}.\n *\n * @param categoryDTO DTO с данными о категории товаров.\n */\n public constructor(categoryDTO: ScICategoryDTO) {\n super(categoryDTO);\n\n this.id = categoryDTO.id;\n this.slug = categoryDTO.slug;\n this.name = categoryDTO.name;\n this.isPrimary = categoryDTO.isPrimary;\n this.isFavoriteValue = Boolean(categoryDTO.isFavorite);\n this.properties = categoryDTO.properties;\n this.parentCategory = categoryDTO.parentCategory && new ScCategory(categoryDTO.parentCategory);\n this.hasChild = categoryDTO.hasChild;\n this.categories = categoryDTO.categories?.map((item) => new ScCategory(item));\n this.image = categoryDTO.properties?.image;\n\n if (this.properties?.editor) {\n this.showConfigurator = true;\n }\n }\n\n /**\n * Возвращает среднюю стоимость м2.\n */\n public get m2Price(): string | undefined {\n return this.properties?.m2Price && `${this.properties.m2Price} ₽/м<sup>2</sup>`;\n }\n\n /**\n * Признак, что в категории есть товары для отображения.\n */\n public get isNotHiddenProducts(): boolean {\n return this.products?.find((product) => !product.isHiddenFilter) !== undefined;\n }\n\n /**\n * Признак, что в категории или вложенных подкатегориях есть товары для отображения.\n */\n public get isNotHiddenProductsIncludeSubcategories(): boolean {\n return (\n this.products?.find((product) => !product.isHiddenFilter) !== undefined ||\n this.categories?.find((category) => category.isNotHiddenProductsIncludeSubcategories) !== undefined\n );\n }\n\n /**\n * Признак, что категория является избранной для клиента.\n *\n * @deprecated\n */\n // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures,grouped-accessor-pairs,sort-class-members/sort-class-members\n public set isFavorite(isFavorite: boolean) {\n this.isFavoriteValue = isFavorite;\n\n this.categories?.forEach((category) => {\n // eslint-disable-next-line no-param-reassign\n category.isFavorite = isFavorite;\n });\n this.products\n ?.filter((product) => product.primaryCategory?.id === this.id)\n .forEach((product) => {\n // eslint-disable-next-line no-param-reassign\n product.isFavorite = isFavorite;\n });\n\n if (!isFavorite && this.parentCategory) {\n this.setIsFavoriteFromChild(isFavorite);\n }\n }\n\n /**\n * Добавляет информацию о родителе и дочерних элементах.\n *\n * @param category Категория содержащая информацию о родителе и дочерних элементах.\n * @deprecated\n */\n public addCategories(category: ScCategory): this {\n this.categories = category.categories ?? [];\n this.products = category.products ?? this.products;\n this.loadedAt = new Date();\n this.categories.forEach((item) => {\n // eslint-disable-next-line no-param-reassign\n item.parentCategory = this;\n });\n this.products?.forEach((product) => {\n // eslint-disable-next-line no-param-reassign\n product.parentCategory = this;\n if (product.primaryCategory?.id === this.id) {\n // eslint-disable-next-line no-param-reassign\n product.primaryCategory = this;\n }\n });\n this.setChildrenCategoriesFilters();\n this.setProductFilters();\n\n return this;\n }\n\n /**\n * Устанавливает фильтры категории древовидного представления каталога.\n *\n * @param filter Фильтры категории древовидного представления каталога.\n * @deprecated\n */\n public setFilter(filter: ScIFilterTreeCategory | '*' | undefined): void {\n this.filter = filter;\n\n this.setChildrenCategoriesFilters();\n this.setProductFilters();\n }\n\n /**\n * Устанавливает фильтры категории древовидного представления каталога для дочерних категорий.\n *\n * @deprecated\n */\n public setChildrenCategoriesFilters(): void {\n this.categories?.forEach((item) => {\n item.setFilter(this.filter === '*' || this.filter === undefined ? this.filter : this.filter.categories?.[item.id]);\n });\n }\n\n /**\n * Устанавливает фильтры категории древовидного представления каталога для товаров.\n *\n * @deprecated\n */\n public setProductFilters(): void {\n this.products?.forEach((product) => {\n // eslint-disable-next-line no-param-reassign,@typescript-eslint/prefer-includes\n product.isHiddenFilter = !(this.filter === '*' || this.filter?.products?.indexOf(product.id) !== -1);\n });\n }\n\n /**\n * Возвращает признак того, что категория загружена и срок жизни данных не истёк.\n *\n * @param categoryData Срок жизни информации о категории в ms.\n * @deprecated\n */\n public cachedDataIsActual(categoryData: number): boolean {\n return this.loadedAt !== undefined && this.loadedAt.getTime() > Date.now() - categoryData;\n }\n\n /**\n * Переключает признак отображения конфигуратора.\n *\n * @deprecated\n */\n public toggleShowConfigurator(): void {\n this.showConfigurator = !this.showConfigurator;\n }\n\n /**\n * Выполняет сортировку товаров по заданной функции в категории и дочерних подкатегориях.\n *\n * @param sortFcn Функция сортировки товаров.\n * @deprecated\n */\n public sortProduct(sortFcn: ((a: ScProduct, b: ScProduct) => number) | undefined) {\n this.products = this.products?.sort(sortFcn);\n this.categories?.forEach((category) => {\n category.sortProduct(sortFcn);\n });\n }\n\n /**\n * Устанавливает флаг избранных товаров клиента всем вложенным позициям на основе флага из родительской категории.\n *\n * @param isFavorite Признак, что категория являются избранной для клиента.\n * @deprecated\n */\n public setIsFavoriteFromChild(isFavorite: boolean): void {\n this.parentCategory?.setIsFavoriteFromChild(isFavorite);\n this.products\n ?.filter((product) => product.primaryCategory?.id === this.id)\n .forEach((product) => {\n // eslint-disable-next-line no-param-reassign\n product.isFavorite = isFavorite;\n });\n this.isFavoriteValue = isFavorite;\n }\n}\n","import { TuiDay } from '@taiga-ui/cdk';\n\nimport { ScCartItem } from '../../cart/dto/sc-cart-item';\nimport { ScIWarehouseStockCount } from '../../warehouse/dto/sc-i-warehouse-stock-count';\nimport { ScIWarehouse } from '../../warehouse/dto/sc-warehouse';\nimport { ScIProductDTO } from '../internal/sc-i-product-dto';\nimport { ScPriceHistory } from '../types/sc-price-history';\nimport { ScCategory } from './sc-category';\nimport { ScIDiscount } from './sc-i-discount';\nimport { ScIProductImages } from './sc-i-product-images';\nimport { ScIProperties } from './sc-i-properties';\nimport { ScSeoResource } from './sc-seo-resource';\n\n/**\n * Модель данных товара/услуги.\n */\nexport class ScProduct extends ScSeoResource implements ScIProductDTO {\n /**\n * Идентификатор товара/услуги.\n */\n public id: number;\n\n /**\n * Символьное обозначение (slug) товара.\n */\n public slug: string;\n\n /**\n * Артикул.\n */\n public code: string;\n\n /**\n * Артикул поставщика.\n */\n public supplierSku?: string;\n\n /**\n * Название товара.\n */\n public name: string;\n\n /**\n * Стоимость товара или услуги в валюте.\n */\n public cost?: number;\n\n /**\n * Стоимость товара или услуги в рублях.\n */\n public costRub?: number;\n\n /**\n * Дата установки цены.\n */\n public costDate?: string;\n\n /**\n * Валюта товара или услуги.\n */\n public currency: string;\n\n /**\n * Единица измерения.\n */\n public unit: string;\n\n /**\n * Единица измерения количества товара.\n */\n public quantityUnit: string;\n\n /**\n * Минимальное количество товара для заказа.\n */\n public minCount?: number;\n\n /**\n * Данные о количество товара, доступном на складах.\n */\n public stockCount?: ScIWarehouseStockCount[];\n\n /**\n * Признак товара \"Под заказ\".\n */\n public onOrder?: boolean;\n\n /**\n * Норма упаковки.\n */\n public pack?: string;\n\n /**\n * Признак, что товар, услуга или категория являются избранными для клиента.\n */\n public isFavorite: boolean;\n\n /**\n * Признак, что товар или услуга, был ранее заказан.\n */\n public isPreviouslyOrdered?: boolean;\n\n /**\n * Список изображений.\n */\n public readonly images?: readonly ScIProductImages[];\n\n /**\n * Список категорий товара.\n */\n public categories: ScCategory[];\n\n /**\n * Список свойств. Число свойств в объекте не ограничено.\n */\n public properties?: ScIProperties;\n\n /**\n * Данные о клиентской скидке.\n */\n public discount?: ScIDiscount;\n\n /**\n * Родительская категория, в которой находится товар или услуга.\n */\n public parentCategory?: ScCategory;\n\n /**\n * Основная категория для товара или услуги.\n */\n public primaryCategory?: ScCategory;\n\n /**\n * Признак наличия изображения у товара.\n */\n public hasImage: boolean = false;\n\n /**\n * Объект элемента корзины.\n */\n public cartItem?: ScCartItem;\n\n /**\n * Признак, что товар отсутствует.\n */\n public isNull: boolean = false;\n\n /**\n * Порядок следования товара в списке.\n */\n public ord: number;\n\n /**\n * Признак того, что товар скрыли фильтром.\n */\n public isHiddenFilter: boolean = false;\n\n /**\n * История изменения цены товара или услуги.\n */\n public priceHistory?: ScPriceHistory;\n\n /**\n * Признак необходимости игнорировать проверку минимального количества и кратности при добавлении товара в корзину и создании заказа.\n */\n public ignoreMinCountCheck: boolean = false;\n\n /**\n * Признак того, что продукт является скрытым.\n */\n public isHidden?: boolean;\n\n /**\n * Инициализирует экземпляр класса {@link ScProduct}.\n *\n * @param productDTO Данные о продукте.\n * @param ord Порядок следования продукта в списке.\n */\n public constructor(productDTO: ScIProductDTO | null, ord: number = 0) {\n super(productDTO);\n\n if (productDTO === null) {\n this.isNull = true;\n this.name = 'Товар не найден';\n } else {\n this.id = productDTO.id;\n this.slug = productDTO.slug;\n this.supplierSku = productDTO.supplierSku;\n this.name = productDTO.name;\n this.cost = productDTO.cost;\n this.costRub = productDTO.costRub;\n this.costDate = productDTO.costDate;\n this.currency = productDTO.currency;\n this.code = productDTO.code;\n this.unit = productDTO.unit;\n this.quantityUnit = productDTO.quantityUnit;\n this.minCount = productDTO.minCount;\n this.stockCount = productDTO.stockCount;\n this.onOrder = productDTO.onOrder;\n this.pack = productDTO.pack;\n this.isFavorite = Boolean(productDTO.isFavorite);\n this.isPreviouslyOrdered = productDTO.isPreviouslyOrdered;\n this.hasImage = (productDTO.images && productDTO.images.length > 0) ?? false;\n this.images = productDTO.images?.slice().sort((img1, img2) => Number(img2.isDefault) - Number(img1.isDefault));\n this.image = productDTO.images?.find((img) => img.isDefault)?.image ?? productDTO.properties?.image;\n this.categories = productDTO.categories.map((category) => new ScCategory(category));\n this.primaryCategory = this.categories.find((item) => item.isPrimary);\n this.ignoreMinCountCheck = productDTO.properties?.ignoreMinCountCheck ?? this.properties?.ignoreMinCountCheck ?? this.ignoreMinCountCheck;\n this.properties = productDTO.properties;\n this.discount = productDTO.discount;\n this.ord = ord;\n this.isHidden = productDTO.isHidden;\n }\n }\n\n /**\n * Стоимость товара или услуги с валютой и единицей измерения.\n */\n public get costString(): string {\n return this.cost ? `${this.cost.toLocaleString()} ${this.currency} / ${this.unit}` : '';\n }\n\n /**\n * Стоимость товара или услуги в рублях и с единицей измерения.\n */\n public get costRubString(): string {\n return this.costRub ? `${this.costRub.toLocaleString()} ₽ / ${this.unit}` : '';\n }\n\n /**\n * Стоимость товара или услуги с валютой и единицей измерения до применения скидки.\n */\n public get discountCostString(): string {\n return this.discount?.oldCost ? `${this.discount.oldCost.toLocaleString()} ${this.currency} / ${this.unit}` : '';\n }\n\n /**\n * Признак, что товар продаётся в рублях.\n */\n public get priceInRub(): boolean {\n return this.currency === '₽';\n }\n\n /**\n * Возвращает первое изображение товара. Если изображений нет, то возвращает undefined.\n *\n * @param imgIndex Индекс изображения в массиве.\n */\n public getImage(imgIndex: number = 0): string | undefined {\n return this.images?.[`${imgIndex}`].image;\n }\n\n /**\n * Возвращает основное изображение товара в формате WebP. Если WebP изображения нет, то возвращает undefined.\n *\n * @param imgIndex Индекс изображения в массиве.\n */\n public getImageWebp(imgIndex: number = 0): string | undefined {\n return this.images?.[`${imgIndex}`].imageWebp;\n }\n\n /**\n * Возвращает первое превью-изображение товара. Если превью-изображений нет, то возвращает undefined.\n *\n * @param imgIndex Индекс превью-изображения в массиве.\n */\n public getImagePreview(imgIndex: number = 0): string | undefined {\n return this.images?.[`${imgIndex}`].preview;\n }\n\n /**\n * Возвращает превью-изображение товара в формате WebP. Если WebP превью нет, то возвращает undefined.\n *\n * @param imgIndex Индекс превью-изображения в массиве.\n */\n public getImagePreviewWebp(imgIndex: number = 0): string | undefined {\n return this.images?.[`${imgIndex}`].previewWebp;\n }\n\n /**\n * Возвращает количество товара на складе (остаток).\n *\n * @param warehouseId Идентификатор склада.\n */\n public getWarehouseStockCount(warehouseId: number): number {\n return this.stockCount?.find((sc) => sc.warehouseId === warehouseId)?.count ?? 0;\n }\n\n /**\n * Возвращает признак, что имеется остаток товара на складе.\n *\n * @param warehouseId Идентификатор склада.\n */\n public isWarehouseStockExist(warehouseId: number): boolean {\n return !this.onOrder && this.stockCount?.find((sc) => sc.warehouseId === warehouseId) !== undefined;\n }\n\n /**\n * Возвращает сообщение об отсутствии товара.\n *\n * @param warehouse Идентификатор склада.\n */\n public getNotStockMessage(warehouse: ScIWarehouse): string | undefined {\n if (this.onOrder ?? this.isWarehouseStockExist(warehouse.id)) {\n return undefined;\n }\n\n const planingDate = this.properties?.planingIncomingDate ?? this.properties?.planingProductionDate;\n\n if (!warehouse.isMain || planingDate === undefined) {\n return 'Раскупили';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const daysDiff = TuiDay.lengthBetween(TuiDay.currentLocal(), TuiDay.normalizeParse(planingDate, 'DMY'));\n\n switch (daysDiff) {\n case 0:\n return 'Будет сегодня';\n case 1:\n return 'Будет завтра';\n case 2:\n return 'Будет послезавтра';\n default:\n return `Ожидается ${planingDate}`;\n }\n }\n}\n","import { ScProduct } from '../../catalog/dto/sc-product';\nimport { ScIConfiguratorSearchProductBase } from '../../configurator/dto/sc-i-configurator-search-product-base';\nimport { ScICartItemDTO } from '../internal/sc-i-cart-item-dto';\n\n/**\n * Единичная позиция товара/услуги в корзине.\n */\nexport class ScCartItem {\n /**\n * Идентификатор позиции товара в корзине.\n */\n public id: number;\n\n /**\n * Данные о товаре.\n */\n public product: ScProduct;\n\n /**\n * Количество товара/услуги.\n */\n public quantity: number;\n\n /**\n * Валюта товара или услуги.\n */\n public currency: string;\n\n /**\n * Итоговая стоимость товара или услуги в валюте.\n */\n public cost: number;\n\n /**\n * Стоимость единицы товара или услуги в валюте.\n */\n public costOne: number;\n\n /**\n * Стоимость единицы товара или услуги в рублях.\n */\n public costOneRub: number;\n\n /**\n * Итоговая стоимость позиции корзины.\n */\n public costRub: number;\n\n /**\n * Описание позиции.\n */\n public marker?: string;\n\n /**\n * Высота товара.\n */\n public height?: number;\n\n /**\n * Длина товара.\n */\n public length?: number;\n\n /**\n * Ширина товара.\n */\n public width?: number;\n\n /**\n * Идентификатор логической группы товаров/услуг.\n */\n public logicGroupId?: string;\n\n /**\n * Направление продаж.\n */\n public salesDirection?: number;\n\n /**\n * URL изображения со спецификацией.\n */\n public specificationImgUrl?: string;\n\n /**\n * Название конфигуратора.\n */\n public configurator?: string;\n\n /**\n * Параметры введенные в конфигуратор, при добавлении позиции в корзину.\n */\n public configuratorParams?: ScIConfiguratorSearchProductBase;\n\n /**\n * Инициализирует экземпляр класса {@link ScCartItem}.\n *\n * @param cartItemDTO DTO единичной позиции товара/услуги в корзине.\n */\n public constructor(cartItemDTO: ScICartItemDTO) {\n this.id = cartItemDTO.id;\n this.product = new ScProduct(cartItemDTO.product);\n this.quantity = cartItemDTO.quantity;\n this.currency = cartItemDTO.currency;\n this.cost = cartItemDTO.cost;\n this.costOne = cartItemDTO.costOne;\n this.costRub = cartItemDTO.costRub;\n this.costOneRub = cartItemDTO.costOneRub;\n this.marker = cartItemDTO.marker;\n this.height = cartItemDTO.height;\n this.length = cartItemDTO.length;\n this.width = cartItemDTO.width;\n this.logicGroupId = cartItemDTO.logicGroupId;\n this.salesDirection = cartItemDTO.salesDirection;\n this.specificationImgUrl = cartItemDTO.specificationImgUrl;\n this.configurator = cartItemDTO.configurator;\n this.configuratorParams = cartItemDTO.configuratorParams;\n }\n\n /**\n * Возвращает стоимость единицы товара (включая валюту). Если стоимость отсутствует, то вернёт '-'.\n */\n public getCostPerItem(): string {\n return this.costOne > 0 ? `${this.costOne.toLocaleString()} ${this.currency}` : '-';\n }\n\n /**\n * Возвращает строковое представление стоимости единицы товара (включая единицу измерения) в валюте. Если стоимость отсутствует, то вернёт '-'.\n */\n public getCostInCurrencyDescPerItem(): string {\n return this.costOne > 0 ? `${this.costOne.toLocaleString()} ${this.currency} / ${this.product.quantityUnit}` : '-';\n }\n\n /**\n * Возвращает строковое представление стоимости единицы товара (включая единицу измерения) в рублях. Если стоимость отсутствует, то вернёт '-'.\n */\n public getCostInRubDescPerItem(): string {\n return this.costOneRub > 0 ? `${this.costOneRub.toLocaleString()} ₽ / ${this.product.quantityUnit}` : '-';\n }\n\n /**\n * Возвращает стоимость товара в виде строки. Если стоимость отсутствует, то вернёт '-'.\n */\n public getCostRubStr(): string {\n return this.costRub > 0 ? `${this.costRub.toLocaleString()} ₽` : '-';\n }\n\n /**\n * Возвращает сообщение о необходимости уточнить цену или пустую строку.\n */\n public getCostMessage(): string {\n return this.costRub === 0 ? 'Цена требует уточнения' : '';\n }\n}\n","import { ScSum } from '../classes';\nimport { ScICartDTO } from '../internal';\nimport { ScCartItem } from './sc-cart-item';\n\n/**\n * Модель данных информация о содержимом корзины.\n */\nexport class ScCart {\n /**\n * Список позиций товаров/услуг в корзине.\n */\n public items: ScCartItem[];\n\n /**\n * Итоговая стоимость корзины в рублях.\n */\n public resultSum: ScSum;\n\n /**\n * Список итоговых сумм по направлениям продаж.\n */\n public directionsSum: Record<number, ScSum>;\n\n /**\n * Инициализирует экземпляр класса {@link ScCart}.\n *\n * @param cartDTO DTO с информацией о содержимом корзины.\n */\n // eslint-disable-next-line unicorn/no-object-as-default-parameter\n public constructor(cartDTO: ScICartDTO = { items: [], resultSum: { rub: 0 }, directionsSum: {} }) {\n this.items = cartDTO.items.map((item) => new ScCartItem(item));\n this.resultSum = cartDTO.resultSum;\n this.directionsSum = cartDTO.directionsSum;\n }\n}\n","import { ScISalesDirection } from '../../references';\nimport { ScSum } from '../classes';\nimport { ScCartItem } from './sc-cart-item';\n\n/**\n * Корзина по направлению продаж.\n */\nexport class ScISalesDirectionCart {\n /**\n * Данные о направлении продаж.\n */\n public salesDirection: ScISalesDirection;\n\n /**\n * Список позиций товаров/услуг в корзине по направлению продаж.\n */\n public items: ScCartItem[];\n\n /**\n * Список позиций товаров/услуг в корзине по направлению продаж, которые идут \"под заказ\".\n */\n public itemsOnOrder: ScCartItem[];\n\n /**\n * Список позиций товаров/услуг в корзине по направлению продаж, которые отсутствуют в наличии.\n */\n public itemsNotInWarehouseStock: ScCartItem[];\n\n /**\n * Итоговая сумма по направлению продаж.\n */\n public directionSum: ScSum;\n\n /**\n * Инициализирует экземпляр класса {@link ScISalesDirectionCart}.\n *\n * @param salesDirection Данные о направлении продаж.\n * @param items Список позиций товаров/услуг в корзине.\n * @param directionSum Данные итоговой суммы.\n * @param warehouseId Идентификатор выбранного склада.\n */\n public constructor(salesDirection: ScISalesDirection, items: ScCartItem[], directionSum: ScSum, warehouseId: number) {\n this.salesDirection = salesDirection;\n this.items = items.filter((item) => item.product.isWarehouseStockExist(warehouseId) && !item.product.onOrder);\n this.itemsOnOrder = items.filter((item) => item.product.onOrder);\n this.itemsNotInWarehouseStock = items.filter((item) => !item.product.isWarehouseStockExist(warehouseId) && !item.product.onOrder);\n this.directionSum = directionSum;\n }\n}\n","/* eslint-disable security/detect-object-injection,no-param-reassign */\n\nimport { HttpParams } from '@angular/common/http';\nimport { Inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { tuiCleanObject } from '@taiga-ui/addon-doc/utils';\n\nimport { ScDateToString } from '../types';\n\n/**\n * Сервис конвертации данных.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScConvertersService {\n /**\n * Инициализирует экземпляр класса {@link ScConvertersService}.\n *\n * @param locale Язык приложения из поставщика.\n */\n public constructor(@Inject(LOCALE_ID) private readonly locale: string) {}\n\n /**\n * Конвертирует объект в {@link HttpParams}.\n *\n * @param object Объект, которые нужно перевести в {@link HttpParams}.\n * @param options Параметры конвертации объекта.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public toHttpParams(object: Record<string, any>, options?: Partial<{ minLength: number; nonNullable: boolean }>): HttpParams {\n object = this.toSimpleObjectRecursive(object);\n object = this.convertDateToString(object);\n\n if (options?.nonNullable) {\n object = tuiCleanObject(object);\n }\n\n if (options?.minLength) {\n object = this.removeByStrLength(object, options.minLength);\n }\n\n return new HttpParams().appendAll(object);\n }\n\n /**\n * Возвращает {@link T} объект из которого удалены свойства со значением null.\n *\n * @param object Объект, в котором необходимо удалить свойства со значением null.\n */\n // eslint-disable-next-line class-methods-use-this\n public removeNull<T extends object>(object: T): T {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return Object.fromEntries(Object.entries(object).filter(([_, v]) => v !== null && v !== '')) as T;\n }\n\n /**\n * Возвращает {@link T} объект из которого рекурсивно удалены свойства со значением null.\n *\n * @param object Объект, в котором необходимо удалить свойства со значением null.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public removeNullRecursive<T extends Record<string, any>>(object: T): T {\n // eslint-disable-next-line no-restricted-syntax\n for (const k of Object.keys(object)) {\n if (object[k] === null) {\n if (Array.isArray(object)) {\n object.splice(+k, 1);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete object[k];\n }\n this.removeNullRecursive(object);\n } else if (typeof object[k] === 'object') {\n this.removeNullRecursive(object[k]);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (Array.isArray(object) && Object.keys(object[k] as Record<string, any>).length === 0) {\n object.splice(+k, 1);\n }\n }\n }\n return object;\n }\n\n /**\n * Возвращает {@link T} объект из которого удалены свойства меньшей длины, чем {@link minLength}.\n *\n * @param object ООбъект, в котором необходимо удалить свойства меньшей длины, чем {@link minLength}.\n * @param minLength Минимально допустимая длина строковых свойств объекта.\n */\n // eslint-disable-next-line class-methods-use-this\n public removeByStrLength<T extends object>(object: T, minLength: number): T {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return Object.fromEntries(Object.entries(object).filter(([_, v]) => (typeof v === 'string' && v.length > minLength) || typeof v !== 'string')) as T;\n }\n\n /**\n * Конвертирует поля, имеющие тип {@link Date}, в {@link object}, и возвращает как новый объект.\n *\n * @param object Объект, в котором необходимо преобразовать поля Date в string.\n */\n public convertDateToString<T extends object>(object: T): ScDateToString<T> {\n return Object.fromEntries(Object.entries(object).map(([_, v]) => (v instanceof Date ? [_, v.toLocaleDateString(this.locale)] : [_, v]))) as ScDateToString<T>;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private createParamKeyString(keys: string[]): string {\n // eslint-disable-next-line unicorn/no-array-reduce\n return keys.reduce((result, current, index) => (index === 0 ? current : `${result}[${current}]`), '');\n }\n\n /**\n * Возвращает новое представление объекта в котором рекурсивно поля преобразованы в формат <patent_properties>[<child_properties>]... .\n *\n * @param object Объект, в котором необходимо преобразовать поля в формат <patent_properties>[<child_properties>]... .\n * @param keys Список ключей до объекта {@link object} в исходном объекте.\n * @param resultObject Итоговый объект.\n */\n public toSimpleObjectRecursive(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object: Record<string, any>,\n keys: string[] = [],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resultObject: Record<string, any> = {}\n ): Record<string, string | number | boolean | Date | null> {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in object) {\n // eslint-disable-next-line sonarjs/no-useless-call\n if (object.hasOwnProperty.call(object, key)) {\n if (typeof object[key] === 'object' && object[key] !== null && !(object[key] instanceof Date)) {\n this.toSimpleObjectRecursive(object[key] as object, [...keys, key], resultObject);\n } else {\n resultObject[this.createParamKeyString([...keys, key])] = object[key] as string | number | boolean | Date | null;\n }\n }\n }\n\n return resultObject;\n }\n}\n","/**\n * Формат отображения каталога.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScCatalogFormat {\n /**\n * Отображение каталога в виде карточек.\n */\n normal = 'normal',\n\n /**\n * Отображение каталога в виде раскрывающегося древовидного списка.\n */\n tree = 'tree',\n}\n","/**\n * Перечисление представления вида плиток товаров.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScProductTileType {\n /**\n * Сетка из вертикальных плиток товаров.\n */\n grid = 'grid',\n\n /**\n * Товары в виде строк, во всю ширину блока.\n */\n lines = 'lines',\n}\n","import { ScCatalogFormat } from '../../catalog/enums/sc-catalog-format';\nimport { ScProductTileType } from '../../catalog/enums/sc-product-tile-type';\nimport { ScINewOrder } from '../../order/dto/sc-i-new-order';\n\n/**\n * Метаданные пользователя.\n */\nexport class ScUserMetadata {\n /**\n * Название свойства и его значение.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n\n /**\n * Список идентификаторов категорий, которые необходимо скрыть в каталоге.\n */\n public hiddenCategories: Array<number | string> = [];\n\n /**\n * Вид отображения плиток товаров.\n */\n public productTileType: ScProductTileType = ScProductTileType.grid;\n\n /**\n * Количество элементов на странице пагинации.\n */\n public paginatePageSize?: number;\n\n /**\n * Метаданные не оформленных заказов.\n */\n public newOrdersMetadata: Record<number, ScINewOrder | undefined> = [];\n\n /**\n * Дата последнего открытия опросников.\n */\n public lastOpenQuestionnaireTime?: number;\n\n /**\n * Формат отображения каталога.\n */\n public catalogFormat: ScCatalogFormat = ScCatalogFormat.normal;\n\n /**\n * Идентификатор выбранного склада.\n */\n public selectedWarehouseId?: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScUserMetadata}.\n *\n * @param data Данные для первоначальной инициализации объекта.\n */\n public constructor(data: Partial<ScUserMetadata> = {}) {\n Object.assign(this, data);\n }\n}\n","/**\n * Перечисление названий справочников.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScReferenceName {\n /**\n * Тип канала сообщений чата.\n */\n chatChannel = 'chat-channel',\n\n /**\n * Город.\n */\n city = 'city',\n\n /**\n * Город с информацией о регионе и стране.\n */\n cityWithRegionAndCountry = 'city-with-region-and-country',\n\n /**\n * Город с информацией о регионе.\n */\n cityWithRegion = 'city-with-region',\n\n /**\n * Страна.\n */\n country = 'country',\n\n /**\n * Тип доставки.\n */\n deliveryType = 'delivery-type',\n\n /**\n * Статус оплаты заказа.\n */\n orderPaymentStatus = 'order-payment-status',\n\n /**\n * Статус заказа.\n */\n orderStatus = 'order-status',\n\n /**\n * Тип оплаты заказа.\n */\n paymentType = 'payment-type',\n\n /**\n * Статус рекламации.\n */\n reclamationStatus = 'reclamation-status',\n\n /**\n * Регион.\n */\n region = 'region',\n\n /**\n * Регион с информацией о стране.\n */\n regionWithCountry = 'region-with-country',\n\n /**\n * Направление продаж.\n */\n salesDirection = 'salesDirection',\n\n /**\n * Розничный магазин.\n */\n store = 'store',\n\n /**\n * Склад.\n */\n warehouse = 'warehouse',\n\n /**\n * ОПФ (организационно-правовая форма).\n */\n opf = 'opf',\n\n /**\n * Валюта.\n */\n currency = 'currency',\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, Observable, of, shareReplay, switchMap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { ScConvertersService } from '../../converters';\nimport { ScDeliveryType } from '../../order/enums/sc-delivery-type';\nimport { ScPaymentType } from '../../order/enums/sc-payment-type';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { SC_USER_INFO, ScClientType, ScUser } from '../../user';\nimport { ScICurrency, ScIReferencesTypes, ScISalesDirection } from '../dto';\nimport { ScOpfList } from '../enums/sc-opf-list';\nimport { ScOrderStateStatus } from '../enums/sc-order-state-status';\nimport { ScPaymentStatus } from '../enums/sc-payment-status';\nimport { ScReclamationStatus } from '../enums/sc-reclamation-status';\nimport { ScReferenceName } from '../enums/sc-reference-name';\n\n/**\n * Сервис справочников.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScReferencesService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * Список направлений продаж.\n */\n public directions$: Observable<ScISalesDirection[]> = this.getReference$<ScISalesDirection[]>(ScReferenceName.salesDirection);\n\n /**\n * Список типов доставки заказа.\n */\n public deliveryTypes$: Observable<Array<ScIReferencesTypes<ScDeliveryType, typeof ScDeliveryType>>> = this.getReference$<\n Array<ScIReferencesTypes<ScDeliveryType, typeof ScDeliveryType>>\n >(ScReferenceName.deliveryType);\n\n /**\n * Список статусов заказа.\n */\n public orderStatuses$: Observable<Array<ScIReferencesTypes<ScOrderStateStatus, typeof ScOrderStateStatus>>> = this.getReference$<\n Array<ScIReferencesTypes<ScOrderStateStatus, typeof ScOrderStateStatus>>\n >(ScReferenceName.orderStatus);\n\n /**\n * Список статусов оплаты заказа.\n */\n public paymentStatuses$: Observable<Array<ScIReferencesTypes<ScPaymentStatus, typeof ScPaymentStatus>>> = this.getReference$<\n Array<ScIReferencesTypes<ScPaymentStatus, typeof ScPaymentStatus>>\n >(ScReferenceName.orderPaymentStatus);\n\n /**\n * Список статусов рекламаций.\n */\n public reclamationStatuses$: Observable<Array<ScIReferencesTypes<ScReclamationStatus, typeof ScReclamationStatus>>> = this.getReference$<\n Array<ScIReferencesTypes<ScReclamationStatus, typeof ScReclamationStatus>>\n >(ScReferenceName.reclamationStatus);\n\n /**\n * Список организационно-правовых форм..\n */\n public opf$: Observable<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>> = this.getReference$<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>>(\n ScReferenceName.opf\n );\n\n /**\n * Список статусов заказа.\n */\n public currencies$: Observable<ScICurrency[]> = this.getReference$<ScICurrency[]>(ScReferenceName.currency);\n\n /**\n * Список типов контрагента.\n *\n * TODO: Заменить на справочники из API. Написать тесты после доработки справочников.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public clientTypes$: Observable<any[]> = of([\n { name: ScClientType.person, description: 'Физическое лицо' },\n { name: ScClientType.org, description: 'Юридическое лицо' },\n { name: ScClientType.ic, description: 'Индивидуальный предприниматель' },\n ]);\n\n /**\n * Список типов оплаты заказа.\n */\n public paymentTypes$: Observable<Array<ScIReferencesTypes<ScPaymentType, typeof ScPaymentType>>> = this.user$.pipe(\n switchMap(() => this.getReference$<Array<ScIReferencesTypes<ScPaymentType, typeof ScPaymentType>>>(ScReferenceName.paymentType)),\n shareReplay(1)\n );\n\n /**\n * Возвращает данные справочника.\n *\n * @param referenceName Название справочника.\n * @param params Дополнительные параметры запроса.\n * @param params.countryId Идентификатор страны.\n * @param params.regionId Идентификатор региона в стране.\n */\n public getReference$<T>(referenceName: ScReferenceName, params?: { countryId?: number; regionId?: number }): Observable<T> {\n return this.http\n .get<T>(`${this.urls.apiUrl}/references/${referenceName}`, { params: this.convertersService.toHttpParams({ params: params }, { nonNullable: true }) })\n .pipe(shareReplay(1));\n }\n\n /**\n * Возвращает данные справочника по идентификатору.\n *\n * @param referenceName Название справочника.\n * @param term Поисковый запрос.\n * @param params Дополнительные параметры запроса.\n * @param params.countryId Идентификатор страны.\n * @param params.regionId Идентификатор региона в стране.\n */\n public getReferenceByTerm$<T>(referenceName: ScReferenceName, term: string, params?: { countryId?: number; regionId?: number }): Observable<T> {\n return this.http\n .get<T>(`${this.urls.apiUrl}/references/${referenceName}/search`, {\n params: this.convertersService.toHttpParams({ term: term, params: params }, { nonNullable: true }),\n })\n .pipe(shareReplay(1));\n }\n\n /**\n * Возвращает данные справочника по идентификатору.\n *\n * @param referenceName Название справочника.\n * @param id Идентификатор записи справочника, информацию о которой необходимо вернуть.\n */\n public getReferenceById$<T>(referenceName: ScReferenceName, id: number): Observable<T> {\n return this.http.get<T>(`${this.urls.apiUrl}/references/${referenceName}/${id}`).pipe(shareReplay(1));\n }\n\n /**\n * Возвращает {@link Observable} направления продаж, соответствующий идентификатору на входе.\n *\n * @param directionId Идентификатор направления продаж.\n */\n public getDirectionById$(directionId: number): Observable<ScISalesDirection | undefined> {\n return this.directions$.pipe(map((directions) => directions.find((direction) => direction.id === directionId)));\n }\n\n /**\n * Возвращает {@link Observable} типа клиента, соответствующий символьному обозначению (slug) на входе.\n * TODO: Написать тесты после доработки справочников.\n *\n * @param slug Символьное обозначение (slug) типа клиента.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public getClientTypesBySlug$(slug: string): Observable<any> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return this.clientTypes$.pipe(map((types) => types.find((type) => type.name === slug)));\n }\n\n /**\n * Возвращает {@link Observable} статус оплаты, соответствующий идентификатору на входе.\n *\n * @param typeId Идентификатор статуса оплаты.\n */\n public getPaymentStatusById$(typeId: ScPaymentStatus): Observable<ScIReferencesTypes<ScPaymentStatus, typeof ScPaymentStatus> | undefined> {\n return this.paymentStatuses$.pipe(map((types) => types.find((type) => type.id === typeId)));\n }\n\n /**\n * Возвращает {@link Observable} тип доставки, соответствующий идентификатору на входе.\n *\n * @param typeId Идентификатор типа доставки.\n */\n public getDeliveryTypeById$(typeId: ScDeliveryType): Observable<ScIReferencesTypes<ScDeliveryType, typeof ScDeliveryType> | undefined> {\n return this.deliveryTypes$.pipe(map((types) => types.find((type) => type.id === typeId)));\n }\n\n /**\n * Возвращает {@link Observable} тип статуса заказа, соответствующий идентификатору на входе.\n *\n * @param statusId Идентификатор типа статуса.\n */\n public getOrderStatusById$(statusId: ScOrderStateStatus): Observable<ScIReferencesTypes<ScOrderStateStatus, typeof ScOrderStateStatus> | undefined> {\n return this.orderStatuses$.pipe(map((types) => types.find((type) => type.id === statusId)));\n }\n\n /**\n * Возвращает {@link Observable} типа статуса рекламаций, соответствующий указанному идентификатору.\n *\n * @param statusId Идентификатор типа статуса.\n */\n public getReclamationStatusById$(statusId: ScReclamationStatus): Observable<ScIReferencesTypes<ScReclamationStatus, typeof ScReclamationStatus> | undefined> {\n return this.reclamationStatuses$.pipe(map((types) => types.find((type) => type.id === statusId)));\n }\n\n /**\n * Возвращает {@link Observable} тип оплаты, соответствующий идентификатору на входе.\n *\n * @param typeId Идентификатор типа оплаты.\n */\n public getPaymentTypeById$(typeId: ScPaymentType): Observable<ScIReferencesTypes<ScPaymentType, typeof ScPaymentType> | undefined> {\n return this.paymentTypes$.pipe(map((types) => types.find((type) => type.id === typeId)));\n }\n\n /**\n * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.\n *\n * @param slug Символьное обозначение (slug).\n */\n public getOpfBySlug$(slug: keyof typeof ScOpfList): Observable<ScIReferencesTypes<ScOpfList, typeof ScOpfList> | undefined> {\n return this.opf$.pipe(map((types) => types.find((type) => type.slug === slug)));\n }\n\n /**\n * Возвращает {@link Observable} валюты, соответствующий идентификатору на входе.\n *\n * @param currencyId Идентификатор валюты.\n */\n public getCurrencyById$(currencyId: number): Observable<ScICurrency | undefined> {\n return this.currencies$.pipe(map((types) => types.find((type) => type.id === currencyId)));\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { distinctUntilKeyChanged, MonoTypeOperatorFunction, Observable } from 'rxjs';\n\nimport { ScUserMetadata } from '../../user';\n\n/**\n * Возвращает фильтр для {@link Observable} изменений метаданных пользователя.\n *\n * @param target Свойство для которого отслеживается изменение.\n * @returns Функция {@link distinctUntilKeyChanged} для отслеживания изменения {@link Observable} {@link ScUserMetadata}.\n */\nexport function filterChangedByKey(target: keyof ScUserMetadata): MonoTypeOperatorFunction<ScUserMetadata> {\n return distinctUntilKeyChanged(target, (previous, current) => previous === current);\n}\n","/* eslint-disable security/detect-object-injection */\n\nimport { Injectable } from '@angular/core';\nimport { distinctUntilChanged, first, map, Observable, ReplaySubject, skip, Subscription, switchMap } from 'rxjs';\n\nimport { ScCatalogFormat } from '../../catalog/enums/sc-catalog-format';\nimport { ScProductTileType } from '../../catalog/enums/sc-product-tile-type';\nimport { ScINewOrder } from '../../order/dto/sc-i-new-order';\nimport { ScUserMetadata } from '../../user/dto/sc-user-metadata';\nimport { ScUserType } from '../../user/enums/sc-user-type';\nimport { ScUserService } from '../../user/services/sc-user.service';\nimport { filterChangedByKey } from '../utils/filter-changed-by-key';\n\n/**\n * Сервис для работы с UI.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUIService {\n /**\n * {@link ReplaySubject} метаданных пользователя.\n */\n private readonly userMetadataSubject: ReplaySubject<ScUserMetadata> = new ReplaySubject<ScUserMetadata>(1);\n\n /**\n * Подписка на изменение метаданных пользователя.\n */\n private metadataSubjectSubscription?: Subscription;\n\n /**\n * Инициализирует экземпляр класса {@link ScUIService}.\n *\n * @param userService Сервис информации о пользователе.\n */\n public constructor(private readonly userService: ScUserService) {\n userService.getUserChange$().subscribe((user) => {\n if (this.metadataSubjectSubscription) {\n this.metadataSubjectSubscription.unsubscribe();\n }\n\n this.userMetadataSubject.next(new ScUserMetadata(user.metadata));\n\n this.metadataSubjectSubscription = this.userMetadataSubject\n .pipe(\n skip(1), // Не нужно обновлять данные пользователя при его смене.\n switchMap((metadata) =>\n user.userType === ScUserType.guest ? this.userService.updateGuestInfo$({ metadata: metadata }) : this.userService.updateUserInfo$({ metadata: metadata })\n )\n )\n .subscribe();\n });\n }\n\n /**\n * Возвращает {@link Observable} метаданных, когда изменяется значение переданного свойства.\n *\n * @param target Свойство для которого отслеживается изменение.\n */\n public getMetadataChangeByKey$<T extends keyof ScUserMetadata, R = ScUserMetadata[T]>(target: T): Observable<R> {\n return this.userMetadataSubject.pipe(\n filterChangedByKey(target),\n map((metadata) => metadata[target] as R)\n );\n }\n\n /**\n * Возвращает {@link Observable} метаданных, когда изменяется значение переданного свойства.\n * TODO: Доработать функцию, чтобы она возвращала Observable.\n *\n * @param target Свойство, значение которого необходимо изменить.\n * @param value Новое значение.\n */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n public setMetadataByKey<T extends keyof ScUserMetadata, V = ScUserMetadata[T]>(target: T, value: V): void {\n this.userMetadataSubject.pipe(first()).subscribe((metadata) => {\n const newMetadata = new ScUserMetadata(metadata);\n\n newMetadata[target] = value;\n this.userMetadataSubject.next(newMetadata);\n });\n }\n\n /**\n * Возвращает {@link Observable} списка категорий, которые необходимо скрыть.\n */\n public getHiddenCategoriesList$(): Observable<Array<number | string>> {\n return this.getMetadataChangeByKey$('hiddenCategories');\n }\n\n /**\n * Устанавливает список категорий, которые необходимо скрыть.\n *\n * @param categoryIds Список идентификаторов категорий, которые необходимо скрыть.\n */\n public setHiddenCategoriesList(categoryIds: Array<number | string>): void {\n this.setMetadataByKey('hiddenCategories', categoryIds);\n }\n\n /**\n * Возвращает {@link Observable} вида представления товара в списке.\n */\n public getProductTileType$(): Observable<ScProductTileType> {\n return this.getMetadataChangeByKey$('productTileType');\n }\n\n /**\n * Устанавливает вид представления товара в списке.\n *\n * @param productTileType Вид представления товара в списке.\n */\n public setProductTileType(productTileType: ScProductTileType): void {\n this.setMetadataByKey('productTileType', productTileType);\n }\n\n /**\n * Возвращает {@link Observable} количества элементов на странице пагинации.\n */\n public getPaginatePageSize$(): Observable<number | undefined> {\n return this.getMetadataChangeByKey$('paginatePageSize');\n }\n\n /**\n * Устанавливает количество элементов на странице пагинации.\n *\n * @param paginatePageSize Количество элементов на странице пагинации.\n */\n public setPaginatePageSize(paginatePageSize: number): void {\n this.setMetadataByKey('paginatePageSize', paginatePageSize);\n }\n\n /**\n * Возвращает {@link Observable} метаданных неоформленного заказа по направлению продаж.\n *\n * @param directionsId Идентификатор направления продаж.\n */\n public getNewOrderMetadata$(directionsId: number): Observable<ScINewOrder | undefined> {\n // Данные представлены массивом объектов, поэтому не используется getMetadataChangeByKey$().\n return this.userMetadataSubject.pipe(\n map((metadata) => metadata.newOrdersMetadata),\n distinctUntilChanged(),\n map((ordersMetadata: Record<number, ScINewOrder | undefined>) => ordersMetadata[directionsId]),\n distinctUntilChanged()\n );\n }\n\n /**\n * Устанавливает метаданные неоформленного заказа по направлению продаж.\n *\n * @param directionsId Идентификатор направления продаж.\n * @param newOrderMetadata Данные нового неоформленного заказа.\n */\n public setNewOrderMetadata(directionsId: number, newOrderMetadata: ScINewOrder): void {\n // При сохранении изображения выдаёт ошибку 500 'Произошла ошибка при работе с базой данных'.\n // TODO: TASK[#6370]: Доработать после решения задачи.\n if (newOrderMetadata.image) {\n // eslint-disable-next-line no-param-reassign\n delete newOrderMetadata.image;\n }\n\n this.getMetadataChangeByKey$('newOrdersMetadata')\n .pipe(first())\n .subscribe((ordersMetadata) => {\n // eslint-disable-next-line no-param-reassign\n ordersMetadata[directionsId] = newOrderMetadata;\n this.setMetadataByKey('newOrdersMetadata', structuredClone(ordersMetadata));\n });\n }\n\n /**\n * Удаляет метаданные неоформленного заказа по направлению продаж.\n *\n * @param directionsId Идентификатор направления продаж.\n */\n public removeNewOrderMetadata(directionsId: number): void {\n this.getMetadataChangeByKey$('newOrdersMetadata')\n .pipe(first())\n .subscribe((ordersMetadata) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete,no-param-reassign\n delete ordersMetadata[directionsId];\n this.setMetadataByKey('newOrdersMetadata', structuredClone(ordersMetadata));\n });\n }\n\n /**\n * Удаляет метаданные не оформленных заказов по всем направлениям продаж.\n */\n public removeAllNewOrdersMetadata(): void {\n this.setMetadataByKey('newOrdersMetadata', []);\n }\n\n /**\n * Возвращает дату последнего открытия опросников.\n */\n public getLastOpenQuestionnaireTime$(): Observable<number | undefined> {\n return this.getMetadataChangeByKey$('lastOpenQuestionnaireTime');\n }\n\n /**\n * Устанавливает дату последнего открытия опросников.\n *\n * @param lastOpenQuestionnaireTime Дата последнего открытия опросников.\n */\n public setLastOpenQuestionnaireTime(lastOpenQuestionnaireTime: number | undefined): void {\n this.setMetadataByKey('lastOpenQuestionnaireTime', lastOpenQuestionnaireTime);\n }\n\n /**\n * Возвращает формат отображения каталога.\n */\n public getCatalogFormat$(): Observable<ScCatalogFormat> {\n return this.getMetadataChangeByKey$('catalogFormat');\n }\n\n /**\n * Устанавливает формат отображения каталога.\n *\n * @param catalogFormat Формат отображения каталога.\n */\n public setCatalogFormat(catalogFormat: ScCatalogFormat): void {\n this.setMetadataByKey('catalogFormat', catalogFormat);\n }\n\n /**\n * Устанавливает идентификатор выбранного склада.\n *\n * @param selectedWarehouseId Идентификатор выбранного склада.\n */\n public setSelectedWarehouseId(selectedWarehouseId: number): void {\n this.setMetadataByKey('selectedWarehouseId', selectedWarehouseId);\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access,security/detect-non-literal-regexp */\n\nimport { inject, InjectionToken, Provider } from '@angular/core';\nimport { WA_USER_AGENT } from '@ng-web-apis/common';\n\nimport { ScITerminalProvider } from './interfaces';\n\n/**\n * Токен признака запущено ли приложение на терминале.\n */\nexport const IS_RUNNING_ON_TERMINAL: InjectionToken<ScITerminalProvider> = new InjectionToken<ScITerminalProvider>('IS_RUNNING_ON_TERMINAL');\n\n/**\n * Возвращает признак, что приложение запущено на терминале, а также код склада который обслуживает этот терминал (вернет null если не идентификатор склада отсутствует).\n *\n * @param userAgentTerminal Регулярное выражение агента пользователя для терминала.\n *\n * @returns Если приложение запущено на терминале, возвращает признак этого\n * и возвращает идентификатор склада привязанного к терминалу в случае его извлечения и, null в случае если склад не удалось извлечь.\n */\nexport function runningOnTerminalFactory(userAgentTerminal: RegExp): ScITerminalProvider {\n const isRunningOnTerminal = userAgentTerminal.test(inject(WA_USER_AGENT));\n\n if (isRunningOnTerminal) {\n const matchResult = new RegExp(`${userAgentTerminal.source}(\\\\w+)`, 'i').exec(inject(WA_USER_AGENT));\n\n if (matchResult && matchResult.length > 1) {\n return { isRunningOnTerminal: isRunningOnTerminal, warehouseId: Number.parseInt(matchResult[1], 10) };\n }\n }\n\n return { isRunningOnTerminal: isRunningOnTerminal, warehouseId: null };\n}\n\n/**\n * Токен агента пользователя для терминала.\n */\nexport const USER_AGENT_TERMINAL: InjectionToken<RegExp> = new InjectionToken<RegExp>('USER_AGENT_TERMINAL', {\n providedIn: 'root',\n factory: () => /sc_terminal_w/i,\n});\n\n/**\n * Провайдеры данных о терминале.\n */\nexport const TERMINAL_PROVIDERS: Provider[] = [\n {\n provide: IS_RUNNING_ON_TERMINAL,\n deps: [USER_AGENT_TERMINAL],\n useFactory: runningOnTerminalFactory,\n },\n];\n","import { inject, Injectable } from '@angular/core';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { BehaviorSubject, distinctUntilChanged, filter, map, Observable, shareReplay, skip, switchMap, tap } from 'rxjs';\n\nimport { ScITerminalProvider } from '../../providers/interfaces/sc-i-terminal-provider';\nimport { IS_RUNNING_ON_TERMINAL } from '../../providers/terminal.providers';\nimport { ScReferenceName } from '../../references/enums/sc-reference-name';\nimport { ScReferencesService } from '../../references/services/sc-references.service';\nimport { SC_USER_INFO, ScUser } from '../../user';\nimport { ScIWarehouse } from '../dto';\n\n/**\n * Сервис для работы со складами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScWarehouseService {\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * {@link ScITerminalProvider} данных о терминале.\n */\n private readonly terminal: ScITerminalProvider = inject(IS_RUNNING_ON_TERMINAL);\n\n /**\n * Список складов.\n */\n private warehouses$: Observable<ScIWarehouse[]> = inject(ScReferencesService).getReference$<ScIWarehouse[]>(ScReferenceName.warehouse).pipe(shareReplay(1));\n\n /**\n * {@link BehaviorSubject} идентификатора выбранного склада.\n */\n private warehouseIdSelectSubject: BehaviorSubject<number | null> = new BehaviorSubject<number | null>(null);\n\n /**\n * Инициализирует экземпляр класса {@link ScWarehouseService}.\n */\n public constructor() {\n this.initSubscriptionOnUser();\n }\n\n /**\n * Инициализирует подписки на изменения пользователя.\n */\n private initSubscriptionOnUser(): void {\n // Observable данных для обработки сигналов изменения пользователя.\n const data$ = this.warehouses$.pipe(\n switchMap((warehouses) =>\n this.user$.pipe(\n map((user) => ({\n warehouses: warehouses,\n selectedIdMetadata: user.metadata.selectedWarehouseId,\n city: user.city,\n region: user.region,\n id: user.id,\n }))\n )\n )\n );\n\n // При входе и выходе устанавливает Id склада, записанный в metadata, либо Id склада соответствующий региону пользователя, либо Id склада умолчанию.\n data$\n .pipe(\n // eslint-disable-next-line unicorn/no-negation-in-equality-check\n distinctUntilChanged((previous, current) => !previous.id === !current.id),\n map((data) => /** data.selectedIdMetadata || */ data.warehouses.find((warehouse) => data.region && warehouse.regions?.includes(data.region))?.id ?? null),\n filter((selectedId) => this.warehouseIdSelectSubject.value !== selectedId),\n tap((selectedId) => {\n this.warehouseIdSelectSubject.next(selectedId);\n })\n )\n .subscribe();\n\n // При смене региона устанавливает в metadata id склада выбранного региона, либо ставит Id склада по умолчанию, если регион был удалён.\n data$\n .pipe(\n // eslint-disable-next-line unicorn/no-negation-in-equality-check\n distinctUntilChanged((previous, current) => !previous.id !== !current.id || previous.city === current.city),\n skip(1), // distinctUntilChanged() всегда выдаёт первое значение, поэтому пропускаем его и реагируем только на изменение.\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing,sonarjs/prefer-nullish-coalescing\n map((data) => data.warehouses.find((warehouse) => data.region && warehouse.regions?.includes(data.region))?.id || data.warehouses.find((item) => item.isMain)?.id),\n filter((selectedId) => selectedId !== undefined && this.warehouseIdSelectSubject.value !== selectedId),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n map((selectedId) => selectedId!),\n tap((selectedId) => {\n this.setWarehouseIdSelectChange(selectedId);\n })\n )\n .subscribe();\n }\n\n /**\n * Устанавливает идентификатор выбранного склада в {@link BehaviorSubject}.\n *\n * @param warehouseId Идентификатор выбранного склада.\n */\n public setWarehouseIdSelectChange(warehouseId: number): void {\n this.warehouseIdSelectSubject.next(warehouseId);\n\n // this.uiService.setSelectedWarehouseId(warehouseId);\n }\n\n /**\n * Возвращает {@link Observable} выбранного склада.\n */\n public getWarehouseSelectChange$(): Observable<ScIWarehouse> {\n return this.warehouses$.pipe(\n switchMap((warehouses) =>\n this.warehouseIdSelectSubject.pipe(\n map((id) => warehouses.find((item) => item.id === id) ?? warehouses.find((item) => item.isMain)),\n filter((warehouse) => warehouse !== undefined)\n )\n ),\n map((warehouse) => warehouse)\n );\n }\n\n /**\n * Возвращает {@link Observable} склада для доставки.\n */\n public getDeliveryWarehouse$(): Observable<ScIWarehouse> {\n return this.warehouses$.pipe(\n map((warehouses) => warehouses.find((item) => item.isMain)),\n filter(tuiIsPresent)\n );\n }\n\n /**\n * Возвращает {@link Observable} склада в зависимости от того, где запущено приложение.\n *\n * @returns Если приложение запущено на терминале и идентификатор склада привязанного к терминалу не null, то возвращает склад терминала,\n * во всех остальных случаях возвращает основной склад.\n */\n public getCatalogWarehouseChange$(): Observable<ScIWarehouse> {\n return this.warehouses$.pipe(\n map((warehouses) => warehouses.find((w) => w.id === this.terminal.warehouseId) ?? warehouses.find((w) => w.isMain)),\n filter(tuiIsPresent)\n );\n }\n\n /**\n * Возвращает {@link Observable} списка складов.\n */\n public getWarehouses$(): Observable<ScIWarehouse[]> {\n return this.warehouses$;\n }\n\n /**\n * Возвращает идентификатор выбранного склада.\n */\n public getCurrentWarehouseIdSelect(): number | null {\n return this.warehouseIdSelectSubject.getValue();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, Observable, ReplaySubject, switchMap, tap } from 'rxjs';\n\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScUploadedFile } from '../../contacts/dto/sc-uploaded-file';\nimport { ScOrder } from '../../order/dto/sc-order';\nimport { IS_BROWSER } from '../../providers/ssr.providers';\nimport { ScReferencesService } from '../../references/services/sc-references.service';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUIService } from '../../ui/services/sc-ui.service';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScWarehouseService } from '../../warehouse';\nimport { ScSum } from '../classes/sc-sum';\nimport { ScCart } from '../dto/sc-cart';\nimport { ScCartItem } from '../dto/sc-cart-item';\nimport { ScINewCartItemBase } from '../dto/sc-i-new-cart-item-base';\nimport { ScISalesDirectionCart } from '../dto/sc-i-sales-direction-cart';\nimport { ScICartDTO } from '../internal/sc-i-cart-dto';\n\n/**\n * Сервис для работы с корзиной.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScCartService {\n /**\n * {@link ReplaySubject} для содержимого корзины.\n */\n private readonly cart$: ReplaySubject<ScCart> = new ReplaySubject<ScCart>(1);\n\n /**\n * {@link Observable} содержимого корзины по направлениям продаж.\n */\n private readonly cartDirections$: Observable<ScISalesDirectionCart[]>;\n\n /**\n * Признак, что скрипт выполняется в браузере.\n */\n private readonly isBrowser: boolean = inject(IS_BROWSER);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис для работы с UI.\n */\n private readonly uiService: ScUIService = inject(ScUIService);\n\n /**\n * Сервис для работы со складами.\n */\n private readonly warehouseService: ScWarehouseService = inject(ScWarehouseService);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Инициализирует экземпляр класса {@link ScCartService}.\n *\n */\n public constructor() {\n if (this.isBrowser) {\n this.user$.pipe(switchMap(() => this.updateCart$())).subscribe((cart) => {\n this.cart$.next(cart);\n });\n } else {\n this.cart$.next(new ScCart());\n }\n\n this.cartDirections$ = inject(ScReferencesService).directions$.pipe(\n switchMap((directions) =>\n this.cart$.pipe(\n switchMap((cart) =>\n this.warehouseService.getWarehouseSelectChange$().pipe(\n map((warehouse) =>\n directions\n .map(\n (direction) =>\n new ScISalesDirectionCart(\n direction,\n cart.items.filter((cartItem) => !cartItem.product.isNull && !cartItem.product.isHidden && cartItem.salesDirection === direction.id),\n cart.directionsSum[direction.id],\n warehouse.id\n )\n )\n .filter((direction) => direction.items.length > 0 || direction.itemsOnOrder.length > 0 || direction.itemsNotInWarehouseStock.length > 0)\n )\n )\n )\n )\n )\n );\n }\n\n /**\n * Возвращает {@link Observable} содержимого корзины.\n */\n public getCartChange$(): Observable<ScCart> {\n return this.cart$.asObservable();\n }\n\n /**\n * Создаёт запрос получения содержимого корзины и обновляет корзину, возвращая {@link Observable} содержимого корзины.\n */\n public updateCart$(): Observable<ScCart> {\n return this.http.get<ScICartDTO>(`${this.urls.apiUrl}/cart`).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap((cart) => {\n this.cart$.next(cart);\n })\n );\n }\n\n /**\n * Создаёт запрос добавления товара в корзину и возвращает {@link Observable} содержимого корзины.\n *\n * @param cartNewItem Новый элемент корзины.\n */\n public addToCart$(cartNewItem: ScINewCartItemBase): Observable<ScCart> {\n return this.http.patch<ScICartDTO>(`${this.urls.apiUrl}/cart`, cartNewItem).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartItemAdded,\n params: { product_id: cartNewItem.productId },\n });\n }),\n tap((cart) => {\n this.cart$.next(cart);\n })\n );\n }\n\n /**\n * Создаёт запрос обновления позиции в корзине и возвращает {@link Observable} содержимого корзины.\n *\n * @param cartItemId Идентификатор элемента корзины.\n * @param cartPatchItem Новые данные элемента корзины.\n */\n public patchCartItem$(cartItemId: number, cartPatchItem: Omit<ScINewCartItemBase, 'productId'>): Observable<ScCart> {\n return this.http.patch<ScICartDTO>(`${this.urls.apiUrl}/cart/${cartItemId}`, cartPatchItem).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap((cart) => {\n this.cart$.next(cart);\n })\n );\n }\n\n /**\n * Создаёт запрос удаления позиции из корзины и возвращает {@link Observable} содержимого корзины.\n *\n * @param cartItem Запись корзины, которую необходимо удалить.\n */\n public deleteCartItem$(cartItem: ScCartItem): Observable<ScCart> {\n return this.http.delete<ScICartDTO>(`${this.urls.apiUrl}/cart/${cartItem.id}`).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartItemDeleted,\n params: { product_id: cartItem.product.id },\n });\n }),\n tap((cart) => {\n this.cart$.next(cart);\n })\n );\n }\n\n /**\n * Создаёт запрос очистки корзины.\n */\n public clearCart$(): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/cart`).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartCleared,\n });\n }),\n tap(() => {\n this.uiService.removeAllNewOrdersMetadata();\n this.cart$.next(new ScCart());\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} содержимого корзины по направлениям продаж.\n */\n public getCartDirectionsChange$(): Observable<ScISalesDirectionCart[]> {\n return this.cartDirections$;\n }\n\n /**\n * Возвращает {@link Observable} позиций в корзине с товарами, которые были удалены из прайс-лита и больше не продаются.\n */\n public getNullCartItems$(): Observable<ScCartItem[]> {\n return this.getCartChange$().pipe(map((cart) => cart.items.filter((item) => item.product.isNull || item.product.isHidden)));\n }\n\n /**\n * Возвращает объект {@link ScCart} корзины, созданный из объекта заказа.\n *\n * @param order Данные о заказе.\n */\n // eslint-disable-next-line class-methods-use-this\n public getCartByOrder(order: ScOrder): ScCart {\n return {\n items: order.products ?? [],\n resultSum: { rub: order.sum },\n directionsSum: { [order.direction]: new ScSum(order.sum) },\n } as ScCart;\n }\n\n /**\n * Возвращает пример CSV файла для добавления продуктов в корзину.\n */\n public getCartCsvExample$(): Observable<Blob> {\n return this.http\n .get(`${this.urls.apiUrl}/cart/csv/example`, {\n responseType: 'blob',\n })\n .pipe(map((blob) => new Blob([blob], { type: 'text/csv' })));\n }\n\n /**\n * Добавляет товары в корзину из файла CSV.\n *\n * @param file Загружаемый файл в формате base64.\n */\n public addProductsFromCsv$(file: ScUploadedFile): Observable<ScCart> {\n return this.http.post<ScICartDTO>(`${this.urls.apiUrl}/cart/csv`, { file }).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap((cart) => {\n this.cart$.next(cart);\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartCsvUpload,\n });\n })\n );\n }\n}\n","/* eslint-disable @typescript-eslint/no-duplicate-enum-values */\n\n/**\n * Перечисление MIME-типов.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScMimeTypes {\n aac = 'audio/aac',\n abw = 'application/x-abiword',\n arc = 'application/x-freearc',\n avi = 'video/x-msvideo',\n azw = 'application/vnd.amazon.ebook',\n bin = 'application/octet-stream',\n bmp = 'image/bmp',\n bz = 'application/x-bzip',\n bz2 = 'application/x-bzip2',\n csh = 'application/x-csh',\n css = 'text/css',\n csv = 'text/csv',\n document_ = 'application/msword',\n docx = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n eot = 'application/vnd.ms-fontobject',\n epub = 'application/epub+zip',\n gz = 'application/gzip',\n gif = 'image/gif',\n htm = 'text/html',\n html = 'text/html',\n ico = 'image/vnd.microsoft.icon',\n ics = 'text/calendar',\n jar = 'application/java-archive',\n jpeg = 'jpg',\n js = 'text/javascript',\n json = 'application/json',\n jsonld = 'application/ld+json',\n mid = 'midi',\n mjs = 'text/javascript',\n mp3 = 'audio/mpeg',\n mpeg = 'video/mpeg',\n mpkg = 'application/vnd.apple.installer+xml',\n odp = 'application/vnd.oasis.opendocument.presentation',\n ods = 'application/vnd.oasis.opendocument.spreadsheet',\n odt = 'application/vnd.oasis.opendocument.text',\n oga = 'audio/ogg',\n ogv = 'video/ogg',\n ogx = 'application/ogg',\n opus = 'audio/opus',\n otf = 'font/otf',\n png = 'image/png',\n pdf = 'application/pdf',\n php = 'application/php',\n ppt = 'application/vnd.ms-powerpoint',\n pptx = 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n rar = 'application/vnd.rar',\n rtf = 'application/rtf',\n sh = 'application/x-sh',\n svg = 'image/svg+xml',\n swf = 'application/x-shockwave-flash',\n tar = 'application/x-tar',\n tif = 'image/tiff',\n tiff = 'image/tiff',\n ts = 'video/mp2t',\n ttf = 'font/ttf',\n txt = 'text/plain',\n vsd = 'application/vnd.visio',\n wav = 'audio/wav',\n weba = 'audio/webm',\n webm = 'video/webm',\n webp = 'image/webp',\n woff = 'font/woff',\n woff2 = 'font/woff2',\n xhtml = 'application/xhtml+xml',\n xls = 'application/vnd.ms-excel',\n xlsx = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n xml = 'XML',\n xul = 'application/vnd.mozilla.xul+xml',\n zip = 'application/zip',\n '3gp' = 'video/3gpp',\n '3g2' = 'video/3gpp2',\n '7z' = 'application/x-7z-compressed',\n}\n","/**\n * Модель закэшированных данных.\n */\nexport class ScCachedData<T> {\n /**\n * Время загрузки данных.\n */\n public loadedAt: Date;\n\n /**\n * Кэшируемые данные.\n */\n public data: T;\n\n /**\n * Инициализирует экземпляр класса {@link ScCachedData}.\n *\n * @param data данные, которые необходимо закэшировать.\n */\n public constructor(data: T) {\n this.loadedAt = new Date();\n this.data = data;\n }\n\n /**\n * Возвращает признак того, что кэшированные данные актуальны.\n *\n * @param lifeTime Срок жизни данных в ms.\n */\n public cachedDataIsActual(lifeTime: number): boolean {\n return this.loadedAt.getTime() > Date.now() - lifeTime;\n }\n}\n","import { BehaviorSubject, Observable, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\n/**\n * Модель кэшированных данных.\n */\nexport class ScCachedItem<T> {\n /**\n * Время, до которого данные кэшированы в ms.\n */\n private cachedUntil?: number;\n\n /**\n * {@link Observable} обновления данных.\n */\n public readonly update$: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);\n\n /**\n * {@link Observable} изменения кэшируемых данных.\n */\n public readonly item$: Observable<T | null>;\n\n /**\n * Инициализирует экземпляр класса {@link ScCachedItem}.\n *\n * @param lifeTime Время жизни записи в ms.\n * @param item$ {@link Observable} запроса кэшируемых данных.\n */\n public constructor(lifeTime: number, item$: Observable<T | null>) {\n this.item$ = this.update$.pipe(\n switchMap(() =>\n item$.pipe(\n tap(() => {\n this.cachedUntil = Date.now() + lifeTime;\n }),\n startWith(null)\n )\n ),\n shareReplay(1)\n );\n }\n\n /**\n * Возвращает признак того, что кэшированные данные актуальны.\n */\n public cachedDataIsActual(): boolean {\n return !this.cachedUntil || this.cachedUntil > Date.now();\n }\n\n /**\n * Выполняет обновления {@link Observable} запроса кэшируемых данных.\n */\n public update(): void {\n this.cachedUntil = undefined;\n this.update$.next();\n }\n}\n","import { ScIVirtualCategoryDTO } from '../internal/sc-i-virtual-category-dto';\nimport { ScCategory } from './sc-category';\nimport { ScIProperties } from './sc-i-properties';\nimport { ScProduct } from './sc-product';\nimport { ScSeoResource } from './sc-seo-resource';\n\n/**\n * Данные о виртуальной категории.\n */\nexport class ScVirtualCategory extends ScSeoResource implements ScIVirtualCategoryDTO {\n /**\n * Название категории.\n */\n public name: string;\n\n /**\n * Символьный идентификатор виртуальной категории.\n */\n public slug: string;\n\n /**\n * Список свойств. Число свойств в объекте не ограничено.\n */\n public properties?: ScIProperties;\n\n /**\n * Данные о родительской виртуальной категории.\n */\n // eslint-disable-next-line no-use-before-define\n public parentCategory?: ScVirtualCategory;\n\n /**\n * Список дочерних виртуальных категорий.\n */\n // eslint-disable-next-line no-use-before-define\n public childCategories?: ScVirtualCategory[];\n\n /**\n * Список продуктов привязанных к виртуальной категории.\n */\n public products?: ScProduct[];\n\n /**\n * Список категорий продуктов привязанных к виртуальной категории.\n */\n public productCategories?: ScCategory[];\n\n /**\n * Инициализирует экземпляр класса {@link ScVirtualCategory}.\n *\n * @param virtualCategoryDTO Данные о виртуальной категории.\n */\n public constructor(virtualCategoryDTO: ScIVirtualCategoryDTO) {\n super(virtualCategoryDTO);\n\n this.name = virtualCategoryDTO.name;\n this.slug = virtualCategoryDTO.slug;\n this.properties = virtualCategoryDTO.properties;\n this.image = virtualCategoryDTO.properties?.image;\n this.parentCategory = virtualCategoryDTO.parentCategory ? new ScVirtualCategory(virtualCategoryDTO.parentCategory) : undefined;\n this.childCategories = virtualCategoryDTO.childCategories?.map((item) => new ScVirtualCategory(item));\n this.products = virtualCategoryDTO.products?.map((item) => new ScProduct(item));\n this.productCategories = virtualCategoryDTO.productCategories?.map((item) => new ScCategory(item));\n }\n}\n","/* TODO: Вынести в internal после переноса в библиотеку CatalogService - TASK[#6433], FavoriteService - TASK[#6435] */\n\nimport { ScIConfiguratorSearchProductBase } from '../../configurator/dto/sc-i-configurator-search-product-base';\nimport { ScIProperties } from '../dto/sc-i-properties';\nimport { ScISeoResourceDTO } from './sc-i-seo-resource-dto';\n\n/**\n * Модель данных категории товаров DTO.\n */\nexport interface ScICategoryDTO extends ScISeoResourceDTO {\n /**\n * Идентификатор категории.\n */\n id: number;\n\n /**\n * Символьное обозначение (slug) категории.\n */\n slug: string;\n\n /**\n * Название категории.\n */\n name: string;\n\n /**\n * Признак того, что категория является основной для некоторого товара или услуги.\n */\n isPrimary?: boolean;\n\n /**\n * Признак, что категория являются избранной для клиента.\n */\n isFavorite?: boolean;\n\n /**\n * Список свойств. Число свойств в объекте не ограничено.\n */\n properties?: ScIProperties;\n\n /**\n * Объект родительской категории.\n */\n parentCategory?: ScICategoryDTO;\n\n /**\n * Список дочерних категорий.\n */\n categories?: ScICategoryDTO[];\n\n /**\n * Признак наличия дочерних категорий.\n */\n hasChild?: boolean;\n\n /**\n * Параметры введенные в конфигуратор, при добавлении позиции в корзину.\n */\n configuratorParams?: ScIConfiguratorSearchProductBase;\n}\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен, указывающий число первых записей товаров со скидкой.\n */\nexport const SC_COUNT_FIRST_DISCOUNTED_PRODUCTS: InjectionToken<number> = tuiCreateToken(10);\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен определяющий, идентификатор или символьное обозначение (slug) используется для роутинга и маршрутизации.\n */\nexport const SC_ID_OR_SLUG_IN_ROUTE: InjectionToken<'id' | 'slug'> = tuiCreateToken<'id' | 'slug'>('id');\n","import { inject, Injectable, Pipe, PipeTransform } from '@angular/core';\n\nimport { SC_ID_OR_SLUG_IN_ROUTE } from '../providers/sc-id-or-slug-in-route';\n\n/**\n * Пайп, возвращающий идентификатор или символьное обозначение (slug) исходя из настроек окружения\n */\n@Pipe({\n name: 'scIdOrSlug',\n standalone: true,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ScIdOrSlugPipe implements PipeTransform {\n /**\n * Признак определяющий, идентификатор или символьное обозначение (slug) используется для роутинга и маршрутизации.\n */\n readonly idOrSlug: 'id' | 'slug' = inject<'id' | 'slug'>(SC_ID_OR_SLUG_IN_ROUTE);\n\n /**\n * Возвращает идентификатор или символьное обозначение (slug) исходя из настроек окружения.\n *\n * @param value Объект содержащий идентификатор и символьное обозначение (slug).\n * @param value.id Идентификатор.\n * @param value.slug Символьное обозначение (slug).\n */\n // eslint-disable-next-line sonarjs/function-return-type\n transform(value: { id: number; slug: string }): number | string {\n return this.idOrSlug === 'id' ? value.id : value.slug;\n }\n}\n","// noinspection TypeScriptValidateTypes\n\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, inject, Injectable } from '@angular/core';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { catchError, expand, filter, first, map, Observable, of, shareReplay, skip, switchMap, takeWhile, tap, toArray } from 'rxjs';\n\nimport { ScICacheLifetime } from '../../config/sc-i-cache-lifetime';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScConvertersService } from '../../converters/services/sc-converters.service';\nimport { ScIPaginate } from '../../pagination/dto/sc-i-paginate';\nimport { ScIdOrSlugPipe } from '../../pipes/sc-id-or-slug.pipe';\nimport { SC_CACHE_LIFETIME } from '../../tokens/sc-cache-lifetime';\nimport { SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT } from '../../tokens/sc-is-hidden-error-alert';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUIService } from '../../ui/services/sc-ui.service';\nimport { ScUserService } from '../../user/services/sc-user.service';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScCachedItem } from '../classes';\nimport { ScCategory } from '../dto/sc-category';\nimport { ScIProductNotifyWhenInStock } from '../dto/sc-i-product-notify-when-in-stock';\nimport { ScProduct } from '../dto/sc-product';\nimport { ScVirtualCategory } from '../dto/sc-virtual-category';\nimport { ScMimeTypes } from '../enums/sc-mime-types';\nimport { ScICategoryProductParams } from '../interfaces/sc-i-category-product-params';\nimport { ScICategoryProductPaginationParams } from '../interfaces/sc-i-category-products-pagination-params';\nimport { ScICategoryDTO, ScIProductDTO } from '../internal';\nimport { ScIVirtualCategoryDTO } from '../internal/sc-i-virtual-category-dto';\nimport { SC_COUNT_FIRST_DISCOUNTED_PRODUCTS } from '../tokens/sc-count-first-discounted-products';\nimport { ScPriceHistory } from '../types/sc-price-history';\n\n/**\n * Сервис для работы с каталогом.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScCatalogService {\n /**\n * {@link Map} коллекция пар ключ-значение для категорий каталога.\n *\n * @deprecated\n */\n private idCategoryMap: Map<number | string | undefined, ScCategory> = new Map<number | string | undefined, ScCategory>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для виртуальных категорий.\n */\n private virtualCategoryMap: Map<string, ScCachedItem<ScVirtualCategory>> = new Map<string, ScCachedItem<ScVirtualCategory>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для кэшированных категорий каталога.\n */\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n private categoryMap: Map<number | string | void, ScCachedItem<ScCategory>> = new Map<number | string | void, ScCachedItem<ScCategory>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для продуктов каталога.\n */\n private productMap: Map<number | string, ScCachedItem<ScProduct>> = new Map<number | string, ScCachedItem<ScProduct>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для кэшированных товаров категории каталога.\n */\n private categoryProductsMap: Map<number | string, ScCachedItem<ScProduct[]>> = new Map<number, ScCachedItem<ScProduct[]>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для кэширования истории цен.\n */\n private productHistoryMap: Map<number | string, ScCachedItem<ScPriceHistory>> = new Map<number | string, ScCachedItem<ScPriceHistory>>();\n\n /**\n * Пайп, возвращающий идентификатор или символьное обозначение (slug) исходя из настроек окружения.\n */\n private readonly idOrSlugPipe: ScIdOrSlugPipe = inject(ScIdOrSlugPipe);\n\n /**\n * {@link Map} коллекция пар ключ-значение для сопоставления slug и id категорий при кешировании запросов, если идентификатор отличается от установленного в проекте (slug/id).\n */\n private readonly categoryIdOrSlugMap: Map<number | string, number | string> = new Map<number | string, number | string>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для сопоставления slug и id товаров при кешировании запросов, если идентификатор отличается от установленного в проекте (slug/id).\n */\n private readonly productIdOrSlugMap: Map<number | string, number | string> = new Map<number | string, number | string>();\n\n /**\n * Число первых записей товаров со скидкой.\n */\n private readonly countFirstDiscountedProducts: number = inject(SC_COUNT_FIRST_DISCOUNTED_PRODUCTS);\n\n /**\n * Сервис информации о пользователе.\n */\n private readonly userService: ScUserService = inject(ScUserService);\n\n /**\n * {@link Observable} изменения списка товаров со скидкой.\n */\n public readonly firstDiscounted$: Observable<ScIPaginate<ScProduct> | null> = inject(SC_USER_INFO).pipe(\n switchMap((user) =>\n user.isGuest ? of(null) : this.getProducts$({ filters: { onlyDiscounted: true }, paginate: true, page: 1, perPage: this.countFirstDiscountedProducts })\n ),\n shareReplay(1)\n );\n\n /**\n * {@link Observable} изменения списка из первых товаров со скидкой.\n */\n public readonly firstDiscountedProducts$: Observable<ScProduct[]> = this.firstDiscounted$.pipe(map((data) => data?.data ?? []));\n\n /**\n * {@link Observable} изменения общего колличества товара со скидкой.\n */\n public readonly countDiscountedProducts$: Observable<number> = this.firstDiscounted$.pipe(map((data) => data?.meta.total ?? 0));\n\n /**\n * Инициализирует экземпляр класса {@link ScCatalogService}.\n *\n * @param http Сервис для выполнения HTTP-запросов.\n * @param urls Список ссылок на разделы backend'a.\n * @param uiService Сервис для работы с UI.\n * @param convertersService Сервис конвертации данных.\n * @param cacheLifeTime Объект с информацией о времени жизни данных.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n private readonly uiService: ScUIService,\n private readonly convertersService: ScConvertersService,\n @Inject(SC_CACHE_LIFETIME) private readonly cacheLifeTime: ScICacheLifetime,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {\n this.userService\n .getUserChange$()\n .pipe(skip(1))\n .subscribe(() => {\n this.idCategoryMap.clear();\n this.categoryMap.clear();\n this.productHistoryMap.clear();\n this.productMap.clear();\n this.categoryProductsMap.clear();\n this.virtualCategoryMap.clear();\n });\n }\n\n /**\n * Возвращает категорию из коллекции каталога, если её срок жизни не истёк.\n *\n * @deprecated Удалить в рамках задачи TASK[#10153].\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n */\n public getCategoryFromMap(categoryIdOrSlug?: number | string): ScCategory | undefined {\n const category = this.idCategoryMap.get(categoryIdOrSlug?.toString());\n\n if (category && (!category.parentCategory || !category.loadedAt || category.cachedDataIsActual(this.cacheLifeTime.categoryData))) {\n return category;\n }\n\n this.idCategoryMap.delete(categoryIdOrSlug?.toString());\n\n return undefined;\n }\n\n /**\n * Создает запрос получения списка категорий товаров или список корневых категорий, если идентификатор категории не указан.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n */\n private getCategoryData$(categoryIdOrSlug?: number | string): Observable<ScCategory> {\n return this.http.get<ScICategoryDTO>(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug ?? ''}`).pipe(\n map((category) => new ScCategory(category)),\n tap((category) => {\n if (categoryIdOrSlug) {\n this.categoryIdOrSlugMap.set(typeof categoryIdOrSlug === 'string' ? category.id : category.slug, categoryIdOrSlug);\n }\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} корневых категорий с настройками отображения, чтобы реагировать на изменения.\n */\n public getFilteredRootCategories$(): Observable<ScCategory[]> {\n return this.uiService.getHiddenCategoriesList$().pipe(\n switchMap((filters) =>\n this.getRootCategories$().pipe(\n filter(tuiIsPresent),\n map((data) => data.filter((category) => category.id && !filters.includes(category.id)))\n )\n )\n );\n }\n\n /**\n * Возвращает {@link Observable} содержимого виртуальной категории.\n *\n * @param slug Символьный идентификатор виртуальной категории.\n */\n public getVirtualCategoryCached$(slug: string): Observable<ScVirtualCategory | null> {\n let cachedItem = this.virtualCategoryMap.get(slug);\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(\n this.cacheLifeTime.categoryData,\n this.http.get<ScIVirtualCategoryDTO>(`${this.urls.apiUrl}/catalog/v-categories/${slug}`).pipe(map((category) => new ScVirtualCategory(category)))\n );\n\n this.virtualCategoryMap.set(slug, cachedItem);\n }\n\n if (!cachedItem.cachedDataIsActual()) {\n cachedItem.update();\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Возвращает {@link Observable} содержимого категории.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n */\n public getCategoryCached$(categoryIdOrSlug?: number | string): Observable<ScCategory | null> {\n if (categoryIdOrSlug && this.categoryIdOrSlugMap.has(categoryIdOrSlug)) {\n // eslint-disable-next-line no-param-reassign\n categoryIdOrSlug = this.categoryIdOrSlugMap.get(categoryIdOrSlug);\n }\n\n let cachedItem = this.categoryMap.get(categoryIdOrSlug?.toString());\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.getCategoryData$(categoryIdOrSlug));\n this.categoryMap.set(categoryIdOrSlug?.toString(), cachedItem);\n }\n\n if (!cachedItem.cachedDataIsActual()) {\n cachedItem.update();\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создает запрос получения корневых категорий.\n */\n public getNullCategory$(): Observable<ScCategory | null> {\n return this.getCategoryCached$();\n }\n\n /**\n * Создает запрос получения корневых категорий.\n */\n public getRootCategories$(): Observable<ScCategory[] | null> {\n return this.getNullCategory$().pipe(map((nullCategory) => nullCategory?.categories ?? null));\n }\n\n /**\n * Раскрывает каталог до указанной категории.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории, до которой необходимо раскрыть каталог.\n * @returns Возвращает список раскрытых категорий.\n */\n public loadCatalogTreeCached$(categoryIdOrSlug: number | string) {\n return this.getCategoryCached$(categoryIdOrSlug).pipe(\n filter(tuiIsPresent),\n first(),\n expand((category) =>\n (category.parentCategory ? this.getCategoryCached$(this.idOrSlugPipe.transform(category.parentCategory)) : this.getNullCategory$()).pipe(\n filter(tuiIsPresent),\n first()\n )\n ),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition,sonarjs/different-types-comparison\n takeWhile((parentCategory) => parentCategory.parentCategory !== undefined, true),\n toArray(),\n // eslint-disable-next-line sonarjs/no-misleading-array-reverse\n map((categories) => categories.reverse())\n );\n }\n\n /**\n * Возвращает {@link Observable} получения истории изменения цен на продукт для клиента.\n *\n * @param product Продукт, для которого запрашивается цена.\n * @returns История изменения цен на продукт для клиента в формате {@link Observable} из запроса.\n */\n public getPriceHistory$(product: ScProduct): Observable<ScPriceHistory | null> {\n let cachedItem = this.productHistoryMap.get(product.id.toString());\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(\n this.cacheLifeTime.categoryData,\n this.http\n .get<ScPriceHistory>(`${this.urls.apiUrl}/catalog/products/${product.id}/price-history`, {\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(catchError(() => of({})))\n );\n\n this.productHistoryMap.set(product.id.toString(), cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создает запрос получения списка товаров для конкретной категории.\n *\n * @param params Параметры запроса товаров категории.\n */\n public getProducts$(params: ScICategoryProductParams): Observable<ScProduct[]>;\n\n /**\n * Создает запрос получения списка товаров каталога с пагинацией.\n *\n * @param params Параметры пагинации товаров.\n */\n public getProducts$(params: ScICategoryProductPaginationParams): Observable<ScIPaginate<ScProduct>>;\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n public getProducts$(params: ScICategoryProductParams | ScICategoryProductPaginationParams): Observable<ScProduct[] | ScIPaginate<ScProduct>> {\n return this.http\n .get<ScIPaginate<ScIProductDTO> | ScIProductDTO[]>(`${this.urls.apiUrl}/catalog/products`, {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n params: this.convertersService.toHttpParams({ ...params }, { nonNullable: true }),\n })\n .pipe(\n // eslint-disable-next-line sonarjs/function-return-type\n map((data) => {\n if ('meta' in data) {\n const cloneData = structuredClone(data);\n\n cloneData.data = cloneData.data.map((item) => new ScProduct(item));\n\n return cloneData as ScIPaginate<ScProduct>;\n }\n\n return data.map((item, index) => new ScProduct(item, index));\n })\n );\n }\n\n /**\n * Создает запрос получения списка товаров категории и кэширует его.\n *\n * @param params Параметры запроса товаров категории.\n */\n public getProductsCategoryCached$(params: ScICategoryProductParams): Observable<ScProduct[] | null> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!params.categoryId && !params.categorySlug) {\n throw new Error('Не указан id/slug категории.');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access\n const cachedKey = (params.categorySlug ?? params.categoryId)!;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access\n let cachedItem = this.categoryProductsMap.get(cachedKey.toString());\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.getProducts$(params));\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call\n this.categoryProductsMap.set(cachedKey.toString(), cachedItem);\n }\n\n if (!cachedItem.cachedDataIsActual()) {\n cachedItem.update();\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Возвращает информацию об указанном продукте.\n *\n * @param productIdOrSlug Идентификатор или slug товара/услуги.\n */\n public getProductData$(productIdOrSlug: number | string): Observable<ScProduct> {\n return this.http.get<ScIProductDTO>(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}`).pipe(\n map((productDTO) => new ScProduct(productDTO)),\n tap((product) => {\n if (productIdOrSlug) {\n this.productIdOrSlugMap.set(typeof productIdOrSlug === 'string' ? product.id : product.slug, productIdOrSlug);\n }\n })\n );\n }\n\n public getProductDataCached$(productIdOrSlug: number | string): Observable<ScProduct | null> {\n const valueFromMap = this.productIdOrSlugMap.get(productIdOrSlug);\n\n if (valueFromMap) {\n // eslint-disable-next-line no-param-reassign\n productIdOrSlug = valueFromMap;\n }\n let cachedItem = this.productMap.get(productIdOrSlug.toString());\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.getProductData$(productIdOrSlug));\n this.productMap.set(productIdOrSlug.toString(), cachedItem);\n }\n\n if (!cachedItem.cachedDataIsActual()) {\n cachedItem.update();\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создаёт запрос на получение генерируемого файла прайс-листа в формате {@link Blob}, и выгружает пользователю в браузер.\n *\n * @param type {@link ScMimeTypes} запрашиваемого файла.\n * @param categoryId Идентификатор категории, для которой загружается прайс-лист.\n */\n public downloadPrice$(type: ScMimeTypes, categoryId?: number): Observable<Blob> {\n const params = this.convertersService.toHttpParams(\n {\n format: Object.keys(ScMimeTypes)[Object.values(ScMimeTypes).indexOf(type)],\n category_id: categoryId ?? null,\n },\n { nonNullable: true }\n );\n\n return this.http.get(`${this.urls.apiUrl}/catalog/download`, { responseType: 'blob', params: params }).pipe(\n map((blob: Blob) => new Blob([blob], { type: type })),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.catalogPriceDownload,\n params: {\n category_id: categoryId ?? 'root',\n price_type: type,\n },\n });\n })\n );\n }\n\n /**\n * Запрос на уведомление пользователя о поступлении продукта.\n *\n * @param productIdOrSlug Идентификатор или slug товара.\n * @param data Данные для запроса.\n */\n public getProductNotifyWhenInStock$(productIdOrSlug: string | number, data: ScIProductNotifyWhenInStock): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/stock-notify`, data);\n }\n}\n","/* eslint-disable no-param-reassign,no-return-assign,no-void */\n\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, map, Observable, of, shareReplay, switchMap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScCategory } from '../dto';\nimport { ScICategoryDTO } from '../internal';\n\n/**\n * Сервис для работы с избранными товарами и категориями.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScFavoriteService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link BehaviorSubject} обновления списка избранных категорий.\n */\n private readonly categoriesUpdateSubject: BehaviorSubject<void> = new BehaviorSubject<void>(void {});\n\n /**\n * Сервис данных о пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * {@link Observable} списка избранных категорий.\n */\n public readonly categories$: Observable<ScCategory[]> = this.categoriesUpdateSubject.pipe(\n switchMap(() => this.user$),\n switchMap((user) => (user.isGuest ? of([]) : this.getFavoriteCategories$())),\n shareReplay(1) // Подогреваем запрос во избежание повторения запросов получения списка избранных категорий для новых подписчиков.\n );\n\n /**\n * Выполняет запрос получения списка избранных категорий.\n */\n public getFavoriteCategories$(): Observable<ScCategory[]> {\n return this.http\n .get<ScICategoryDTO[]>(`${this.urls.apiUrl}/favorites/categories`)\n .pipe(map((categoriesDTO) => categoriesDTO.map((categoryDTO) => new ScCategory(categoryDTO))));\n }\n\n /**\n * Запрос добавления указанной категории в избранное.\n *\n * @param categoryId Идентификатор категории, которую необходимо добавить в избранное.\n */\n public putCategory$(categoryId: number): Observable<undefined> {\n return this.http.put<undefined>(`${this.urls.apiUrl}/favorites/categories/${categoryId}`, {});\n }\n\n /**\n * Выполняет запрос удаления указанной категории из избранных.\n *\n * @param categoryId Идентификатор категории, которую необходимо удалить из избранных.\n */\n public deleteCategory$(categoryId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/favorites/categories/${categoryId}`);\n }\n\n /**\n * Обновляет список избранных категорий {@link categories$}.\n */\n public updateFavoriteCategories(): void {\n this.categoriesUpdateSubject.next();\n }\n\n /**\n * Выполняет запрос добавления указанного товара в избранное.\n *\n * @param productId Идентификатор товара, который необходимо добавить в избранное.\n */\n public putProduct$(productId: number): Observable<undefined> {\n return this.http.put<undefined>(`${this.urls.apiUrl}/favorites/products/${productId}`, {});\n }\n\n /**\n * Выполняет запрос удаления указанного продукта из избранных.\n *\n * @param productId Идентификатор товара, который необходимо удалить из избранных.\n */\n public deleteProduct$(productId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/favorites/products/${productId}`);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { tuiPure } from '@taiga-ui/cdk';\nimport { catchError, distinctUntilChanged, map, Observable, of, skip, startWith, switchMap } from 'rxjs';\n\nimport { ScCartService } from '../../cart';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScConvertersService } from '../../converters';\nimport { SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT } from '../../tokens/sc-is-hidden-error-alert';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScCachedItem } from '../classes';\nimport { ScProduct } from '../dto/sc-product';\nimport { ScIProductDTO } from '../internal';\n\n/**\n * Сервис для работы с рекомендуемыми товарами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScRecommendationService {\n /**\n * {@link Map} коллекция пар ключ-значение для кэшированных рекомендуемых товаров категории.\n */\n private readonly productsByCategoryMap: Map<number | string, ScCachedItem<ScProduct[]>> = new Map<number, ScCachedItem<ScProduct[]>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для кэшированных рекомендуемых товаров товара.\n */\n private readonly productsByProductMap: Map<number | string, ScCachedItem<ScProduct[]>> = new Map<number, ScCachedItem<ScProduct[]>>();\n\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * Сервис для работы с корзиной.\n */\n private readonly cartService: ScCartService = inject(ScCartService);\n\n /**\n * Инициализирует экземпляр класса {@link ScRecommendationService}.\n */\n public constructor() {\n inject(SC_USER_INFO)\n .pipe(skip(1))\n .subscribe(() => {\n this.productsByCategoryMap.clear();\n this.productsByProductMap.clear();\n });\n }\n\n /**\n * Создает запрос на получение списка рекомендованных товаров для категории.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n */\n public getProductsByCategory$(categoryIdOrSlug: number | string): Observable<ScProduct[] | null> {\n let cachedItem = this.productsByCategoryMap.get(categoryIdOrSlug.toString());\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().\n cachedItem = new ScCachedItem(\n 0,\n this.http\n .get<ScIProductDTO[]>(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/recommendations`, {\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(\n catchError(() => of([])),\n map((productsDTO) => productsDTO.map((product) => new ScProduct(product)))\n )\n );\n this.productsByCategoryMap.set(categoryIdOrSlug.toString(), cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создает запрос на получение списка рекомендованных товаров для продукта.\n *\n * @param productIdOrSlug Идентификатор или slug товара/услуги.\n */\n public getProductsByProduct$(productIdOrSlug: number | string): Observable<ScProduct[] | null> {\n let cachedItem = this.productsByProductMap.get(productIdOrSlug.toString());\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().\n cachedItem = new ScCachedItem(\n 0,\n this.http\n .get<ScIProductDTO[]>(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/recommendations`, {\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(\n catchError(() => of([])),\n map((productsDTO) => productsDTO.map((product) => new ScProduct(product)))\n )\n );\n this.productsByProductMap.set(productIdOrSlug.toString(), cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создает запрос на получение списка рекомендованных товаров для списка идентификаторов товаров.\n *\n * @param productIds Идентификаторы продуктов.\n */\n public getProductsByProductIds$(productIds: number[]): Observable<ScProduct[]> {\n return this.http\n .get<ScIProductDTO[]>(`${this.urls.apiUrl}/catalog/products/recommendations`, {\n params: this.convertersService.toHttpParams({ products: productIds }, { nonNullable: true }),\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(\n catchError(() => of([])),\n map((productsDTO) => productsDTO.map((product) => new ScProduct(product)))\n );\n }\n\n /**\n * Создает запрос на получение списка рекомендованных товаров для корзины клиента.\n */\n @tuiPure\n public getProductsByCart$(): Observable<ScProduct[] | null> {\n return this.cartService.getCartChange$().pipe(\n map((cart) => cart.items.map((item) => Number(item.product.id))),\n // Отфильтровываем повторения. Они возникнут если было изменено количество товара без удаления\\добавления новых товаров.\n // eslint-disable-next-line sonarjs/no-misleading-array-reverse\n distinctUntilChanged((previous, current) => JSON.stringify(previous.sort((a, b) => a - b)) === JSON.stringify(current.sort((a, b) => a - b))),\n switchMap((productIds) => this.getProductsByProductIds$(productIds).pipe(startWith(null)))\n );\n }\n}\n","/**\n * Перечисление ключей маршрутов.\n */\nexport enum ScRouteKeys {\n /**\n * Ключ главной страницы.\n */\n landing = 'landing',\n\n /**\n * Ключ страницы контактов и реквизитов.\n */\n contacts = 'contacts',\n\n /**\n * Ключ страницы публичной оферты.\n */\n offer = 'offer',\n\n /**\n * Ключ страницы политики обработки персональных данных.\n */\n personalDataProcessingPolicy = 'personal_data_processing_policy',\n\n /**\n * Ключ страницы ошибок.\n */\n error = 'error',\n\n /**\n * Ключ страницы файлы и документы.\n */\n files = 'files',\n\n /**\n * Ключ страницы вакансий.\n */\n vacancies = 'vacancies',\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { map, Observable, of, tap } from 'rxjs';\n\nimport { ScCatalogService, ScIProductDTO, ScProduct } from '../../catalog';\nimport { ScIUrls } from '../../config';\nimport { SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_URLS } from '../../tokens';\nimport { ScIConfiguratorBase, ScIConfiguratorSettingsBase } from '../dto';\nimport { ScTypeByKey } from '../types';\n\n/**\n * Сервис для работы с конфигуратором.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScConfiguratorService {\n /**\n * Инициализирует экземпляр класса {@link ScConfiguratorService}.\n *\n * @param configuratorComponents Список компонентов конфигураторов по их названию.\n * @param configuratorSettings Список моделей настроек конфигураторов по их названию.\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n * @param catalogService Сервис для работы с каталогом.\n */\n public constructor(\n @Inject(SC_CONFIGURATOR_COMPONENTS) private readonly configuratorComponents: ScTypeByKey<ScIConfiguratorBase>,\n @Optional() @Inject(SC_CONFIGURATOR_SETTINGS) private readonly configuratorSettings: ScTypeByKey<ScIConfiguratorSettingsBase> | undefined,\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n private readonly catalogService: ScCatalogService\n ) {}\n\n /**\n * Возвращает признак того, что конфигуратор с указанным названием существует и реализован.\n *\n * @param name Название конфигуратора.\n */\n public isConfiguratorExists(name: string): boolean {\n return Object.keys(this.configuratorComponents).includes(name);\n }\n\n /**\n * Возвращает настройки конфигуратора категории.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n * @param editor Название конфигуратора.\n */\n public getSettings$(categoryIdOrSlug: string | number, editor: string) {\n const category = this.catalogService.getCategoryFromMap(categoryIdOrSlug);\n\n if (category?.configuratorSettings) {\n return of(category.configuratorSettings);\n }\n\n return this.http.get<ScIConfiguratorSettingsBase>(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/configurators/${editor}/settings`).pipe(\n // eslint-disable-next-line security/detect-object-injection\n map((settings) => (this.configuratorSettings && editor in this.configuratorSettings ? new this.configuratorSettings[editor](settings) : settings)),\n tap((settings) => {\n if (category) {\n category.configuratorSettings = settings;\n }\n })\n );\n }\n\n /**\n * Возвращает информацию о продукте, по указанным параметрам конфигуратора.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n * @param editor Название конфигуратора.\n * @param params Параметры конфигуратора для поиска товара.\n */\n public getProduct$(categoryIdOrSlug: string | number, editor: string, params: HttpParams): Observable<ScProduct> {\n return this.http\n .get<ScIProductDTO>(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/configurators/${editor}/product`, { params: params })\n .pipe(map((productDTO) => new ScProduct(productDTO)));\n }\n\n /**\n * Создаёт пользовательский шаблон конфигуратора.\n *\n * @param categoryId Идентификатор записи категории товаров.\n * @param editor Название конфигуратора.\n * @param newTemplate Параметры шаблона для создания.\n */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n public saveTemplate$<T>(categoryId: number, editor: string, newTemplate: T): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/catalog/categories/${categoryId}/configurators/${editor}/template`, newTemplate);\n }\n\n /**\n * Удаляет пользовательский шаблон конфигуратора.\n *\n * @param categoryId Идентификатор записи категории товаров.\n * @param editor Название конфигуратора.\n * @param templateId Идентификатор записи шаблона.\n */\n public removeTemplate$(categoryId: number, editor: string, templateId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/catalog/categories/${categoryId}/configurators/${editor}/template/${templateId}`);\n }\n}\n","/**\n * Перечисление, представляющее различные формы обратной связи.\n */\nexport enum ScFeedbackForms {\n /**\n * Пожелания и предложения по улучшению сайта.\n */\n suggest = 'suggest',\n\n /**\n * Оставить заявку на получение бесплатных образцов.\n */\n samples = 'samples',\n\n /**\n * Форма обратной связи со страницы контактов.\n */\n contacts = 'contacts',\n\n /**\n * Форма обратной связи со страницы вакансий.\n */\n vacancies = 'vacancies',\n\n /**\n * Задать вопрос.\n */\n questions = 'questions',\n\n /**\n * Заказать изготовление москитной сетки.\n */\n mosquitoes = 'mosquitoes',\n}\n","/**\n * Перечисление типов контактов по социальным сетям.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScSocialType {\n /**\n * @see [Инстаграм](https://www.instagram.com/)\n */\n instagram = 'instagram',\n\n /**\n * @see [Одноклассники](https://ok.ru/)\n */\n ok = 'ok',\n\n /**\n * @see [Telegram](https://telegram.org/)\n */\n telegram = 'telegram',\n\n /**\n * @see [В Контакте](https://vk.com/)\n */\n vk = 'vk',\n}\n","/**\n * Модель данных для загружаемого файла.\n */\nexport class ScUploadedFile {\n /**\n * Инициализирует экземпляр класса {@link ScUploadedFile}.\n *\n * @param name Название загружаемого пользователем файла.\n * @param content Содержимое файла кодированное в base64.\n */\n public constructor(\n public name: string,\n public content: string\n ) {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, of, switchMap, tap } from 'rxjs';\n\nimport { ScCachedItem } from '../../catalog/classes/sc-cached-item';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScIContact } from '../../user/dto/sc-i-contact';\nimport { ScIContactBase } from '../../user/dto/sc-i-contact-base';\nimport { ScIContactOnDataCreate } from '../../user/dto/sc-i-contact-on-data-create';\nimport { ScIContactWithRelations } from '../../user/dto/sc-i-contact-with-relations';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScIOrgContact } from '../dto';\n\n/**\n * Сервис для работы с контактными лицами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScContactsService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * {@link Observable} получения списка контактных лиц пользователя, контрагентов пользователя и адресов доставки пользователя.\n */\n private readonly allContacts: ScCachedItem<ScIContact[]> = new ScCachedItem<ScIContact[]>(\n 0,\n this.user$.pipe(switchMap((user) => (user.isGuest ? of(null) : this.http.get<ScIContact[]>(`${this.urls.apiUrl}/user/contacts/all`))))\n );\n\n /**\n * {@link Observable} получения списка контактных лиц пользователя.\n */\n public readonly userContacts: ScCachedItem<ScIContact[]> = new ScCachedItem<ScIContact[]>(\n 0,\n this.user$.pipe(switchMap((user) => (user.isGuest ? of(null) : this.http.get<ScIContact[]>(`${this.urls.apiUrl}/user/contacts`))))\n );\n\n /**\n * {@link Map} коллекция пар ключ-значение с данными о контактных лицах адресов доставки.\n */\n public readonly deliveryAddressContactsMap: Map<number, ScCachedItem<ScIContactWithRelations[]>> = new Map<number, ScCachedItem<ScIContactWithRelations[]>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение с данными о контактных лицах контрагентов.\n */\n public readonly contragentContactsMap: Map<number, ScCachedItem<ScIContact[]>> = new Map<number, ScCachedItem<ScIContact[]>>();\n\n /**\n * Возвращает список всех контактов.\n */\n public getContact$(): Observable<ScIContact[] | null> {\n return this.allContacts.item$;\n }\n\n /**\n * Создаёт запрос создания контактного лица.\n *\n * @param newContact Данные требуемые для создания контактного лица.\n */\n public createContact$(newContact: ScIContactOnDataCreate): Observable<ScIContactWithRelations> {\n return this.http.post<ScIContactWithRelations>(`${this.urls.apiUrl}/user/contacts`, newContact).pipe(\n tap(() => {\n this.allContacts.update();\n\n if (newContact.client) {\n this.userContacts.update();\n }\n\n if (newContact.addresses) {\n newContact.addresses.forEach((item) => this.deliveryAddressContactsMap.get(item.id)?.update());\n }\n\n if (newContact.contragents) {\n newContact.contragents.forEach((item) => this.contragentContactsMap.get(item.id)?.update());\n }\n })\n );\n }\n\n /**\n * Создаёт запрос изменения контактного лица пользователя.\n *\n * @param contactId Идентификатор контакта пользователя.\n * @param newContact Данные требуемые для создания контактного лица.\n */\n public editContact$(contactId: number, newContact: ScIContactBase): Observable<ScIContactWithRelations> {\n return this.http.patch<ScIContactWithRelations>(`${this.urls.apiUrl}/user/contacts/${contactId}`, newContact).pipe(\n tap(() => {\n this.allContacts.update();\n })\n );\n }\n\n /**\n * Создаёт запрос удаления контактного лица пользователя.\n *\n * @param contactId Идентификатор контакта пользователя.\n */\n public deleteContact$(contactId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/user/contacts/${contactId}`).pipe(\n tap(() => {\n this.allContacts.update();\n })\n );\n }\n\n /**\n * Содаёт запрос на получение списка контактов для помощи клиенту.\n *\n * @param params Параметры поиска контактов (телефон или ID города).\n * @param params.phone Телефон клиента.\n * @param params.cityId ID города.\n */\n public getHelpContacts$(params: { phone?: string; cityId?: number }): Observable<ScIOrgContact[]> {\n return this.http.get<ScIOrgContact[]>(`${this.urls.apiUrl}/contacts/help`, {\n params: params,\n });\n }\n}\n","import { HttpContextToken } from '@angular/common/http';\n\n/**\n * Токен, указывающий на необходимость добавления заголовков в исходящие запросы.\n */\nexport const SC_IS_HEADER_REQUIRED: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => true);\n","import { EventEmitter, InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIPaginationParams } from '../pagination/dto/sc-i-pagination-params';\n\n/**\n * Значения пагинации списка товаров категории по умолчанию.\n */\nexport const SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS: ScIPaginationParams = {\n perPage: 20,\n page: 0,\n};\n\n/**\n * Токен значений пагинации списка товаров в каталоге по умолчанию.\n */\nexport const SC_PRODUCT_PAGINATION_OPTIONS: InjectionToken<ScIPaginationParams> = tuiCreateToken(SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS);\n\n/**\n * Токен {@link EventEmitter} событие нажатия на кнопку \"Показать следующие позиции категории\".\n */\nexport const SC_NEXT_PAGE_PAGINATION_CLICK: InjectionToken<EventEmitter<void>> = tuiCreateToken(new EventEmitter<void>());\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, map, Observable, tap, throwError } from 'rxjs';\n\nimport { ScCategory, ScFiltersTreeCatalog } from '../../catalog';\nimport { ScICategoryDTO } from '../../catalog/internal';\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { ScISimpleSearch } from '..';\n\n/**\n * Сервис поиска по каталогу.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScSearchService {\n /**\n * {@link BehaviorSubject} поискового запрос.\n */\n private searchTerm$: BehaviorSubject<string | null> = new BehaviorSubject<string | null>(null);\n\n /**\n * Инициализирует экземпляр класса {@link ScSearchService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {}\n\n /**\n * Выполняет упрощенный поиск товаров и категорий. Возвращает ограниченное количество записей.\n *\n * @param term Поисковый запрос.\n */\n public simple$(term: string): Observable<ScISimpleSearch> {\n return this.http.get<ScISimpleSearch>(`${this.urls.apiUrl}/catalog/search/simple`, { params: { term: term } }).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.catalogSearch,\n params: {\n search_type: 'simple',\n term: term,\n },\n });\n })\n );\n }\n\n /**\n * Выполняет поиск категорий в каталоге.\n *\n * @param term Поисковый запрос.\n */\n public categories$(term: string): Observable<ScCategory[]> {\n return this.http.get<ScICategoryDTO[]>(`${this.urls.apiUrl}/catalog/search/categories`, { params: { term: term } }).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.catalogSearch,\n params: {\n search_type: 'categories',\n term: term,\n },\n });\n }),\n map((categories) => categories.map((item) => new ScCategory(item)))\n );\n }\n\n /**\n * Выполняет полный поиск по всему прайс-листу.\n *\n * @param term Поисковый запрос.\n * @param showOrderedProducts Признак того, что необходимо вернуть ранее заказанные продукты.\n * @param showFavoriteProducts Признак того, что необходимо вернуть избранные продукты.\n * @param showDiscountedProducts Признак того, что необходимо вернуть продукты со скидкой.\n */\n public full$(term?: string, showOrderedProducts?: boolean, showFavoriteProducts?: boolean, showDiscountedProducts?: boolean): Observable<ScFiltersTreeCatalog> {\n const params: Record<string, string | number> = {};\n\n if (term) {\n params['term'] = term;\n }\n\n if (showOrderedProducts) {\n params['show_ordered_products'] = Number(showOrderedProducts);\n }\n\n if (showFavoriteProducts) {\n params['show_favorite_products'] = Number(showFavoriteProducts);\n }\n\n if (showDiscountedProducts) {\n params['show_discounted_products'] = Number(showDiscountedProducts);\n }\n\n if (Object.keys(params).length > 0) {\n return this.http.get<ScFiltersTreeCatalog>(`${this.urls.apiUrl}/catalog/search/full`, { params: params }).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.catalogSearch,\n params: {\n search_type: 'full',\n term: term,\n },\n });\n })\n );\n }\n return throwError(() => new Error('Необходимо указать хотя бы один параметр.'));\n }\n\n /**\n * Устанавливает поисковый запрос в {@link BehaviorSubject}.\n *\n * @param term Поисковый запрос.\n */\n public setSearchTermChange(term: string | null): void {\n this.searchTerm$.next(term);\n }\n\n /**\n * Возвращает {@link Observable} поискового запроса.\n */\n public getSearchTermChange$(): Observable<string | null> {\n return this.searchTerm$.asObservable();\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { ScSearchService } from '../search/services/sc-search.service';\n\n/**\n * Токен поиска введенного терма.\n */\nexport const SEARCH_TERM: InjectionToken<Observable<string>> = new InjectionToken<Observable<string>>('SEARCH_TERM');\n\n/**\n * Токен минимального количества введенных символов в поле поиска.\n */\nexport const SC_MIN_LENGTH_SEARCH_TERM: InjectionToken<number> = new InjectionToken<number>('SC_MIN_LENGTH_SEARCH_TERM');\n\n/**\n * Токен максимального количества введенных символов в поле поиска.\n */\nexport const SC_MAX_LENGTH_SEARCH_TERM: InjectionToken<number> = new InjectionToken<number>('SC_MAX_LENGTH_SEARCH_TERM');\n\n/**\n * Возвращает введенный терм для поиска.\n *\n * @param searchService Сервис поиска по каталогу.\n * @param minLengthSearchTerm Минимальное количество введенных символов в поле поиска.\n * @param maxLengthSearchTerm Максимальное количество введенных символов в поле поиска.\n */\nexport function searchTermFactory(searchService: ScSearchService, minLengthSearchTerm: number, maxLengthSearchTerm: number): Observable<string> {\n return searchService\n .getSearchTermChange$()\n .pipe(map((searchTerm) => (searchTerm && searchTerm.length >= minLengthSearchTerm && searchTerm.length <= maxLengthSearchTerm ? searchTerm : '')));\n}\n\n/**\n * Провайдеры данных о поиске введенного терма.\n */\nexport const SEARCH_TERM_PROVIDERS: Provider[] = [\n {\n provide: SEARCH_TERM,\n deps: [ScSearchService, SC_MIN_LENGTH_SEARCH_TERM, SC_MAX_LENGTH_SEARCH_TERM],\n useFactory: searchTermFactory,\n },\n];\n","/* eslint-disable no-param-reassign,no-return-assign,jsdoc/check-param-names */\n\nimport { InjectionToken, Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { filter, map, Observable, shareReplay, switchMap } from 'rxjs';\n\nimport { ScVirtualCategory } from '../catalog/dto/sc-virtual-category';\nimport { ScCatalogService } from '../catalog/services/sc-catalog.service';\n\n/**\n * Токен потока данных о виртуальной категории.\n */\nexport const SC_VIRTUAL_CATEGORY_INFO = new InjectionToken<Observable<ScVirtualCategory | null>>('A stream with current virtual category information');\n\n/**\n * Фабрика создания потока данных виртуальной категории.\n *\n * @param paramMap Параметры.\n * @param paramMap.paramMap Параметры.\n * @param catalogService.paramMap Параметры маршрута.\n * @param catalogService Сервис для работы с каталогом.\n */\nfunction virtualCategoryFactory({ paramMap }: ActivatedRoute, catalogService: ScCatalogService): Observable<ScVirtualCategory | null> {\n return paramMap.pipe(\n map((params) => params.get('categorySlug')),\n filter(tuiIsPresent),\n switchMap((categorySlug) => catalogService.getVirtualCategoryCached$(categorySlug).pipe(shareReplay())),\n takeUntilDestroyed()\n );\n}\n\n/**\n * Провайдеры потока данных о виртуальной категории.\n */\nexport const SC_VIRTUAL_CATEGORY_PROVIDERS: Provider[] = [\n {\n provide: SC_VIRTUAL_CATEGORY_INFO,\n deps: [ActivatedRoute, ScCatalogService],\n useFactory: virtualCategoryFactory,\n },\n];\n","import { InjectionToken } from '@angular/core';\n\nimport { ScICompanyBaseInfo } from '../config/sc-i-company-base-info';\n\n/**\n * Токен для получения полной информации о компании.\n */\nexport const SC_COMPANY_INFO: InjectionToken<ScICompanyBaseInfo> = new InjectionToken<ScICompanyBaseInfo>('SC_COMPANY_INFO');\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { WA_LOCAL_STORAGE } from '@ng-web-apis/common';\nimport { filterByKey, StorageService, toValue, WA_STORAGE_EVENT } from '@ng-web-apis/storage';\nimport { isMatch, isString } from 'lodash-es';\nimport { combineLatest, filter, map, Observable, startWith, switchMap, tap } from 'rxjs';\n\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { IS_BROWSER } from '../../providers';\nimport { SC_CACHE_LIFETIME, SC_URLS } from '../../tokens';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUTM, ScUTMParams } from '../interfaces';\n\n/**\n * Сервис для работы с UTM-меткой страницы.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUTMService {\n /**\n * Список ссылок на разделы backend.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис для выполнения HTTP-запросов.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Сервис предоставляющий доступ к данным о маршруте.\n */\n private readonly activatedRoute = inject(ActivatedRoute);\n\n /**\n * Сервис маршрутизации.\n */\n private readonly router = inject(Router);\n\n /**\n * Сервис для работы с {@link Storage} и внедрению его через DI.\n */\n private readonly storageService: Storage = inject(StorageService);\n\n /**\n * Признак, что скрипт выполняется в браузере.\n */\n private readonly isBrowser: boolean = inject(IS_BROWSER);\n\n /**\n * Хранилище {@link Storage}.\n */\n private readonly storage: Storage | null = inject(WA_LOCAL_STORAGE, { optional: true });\n\n /**\n * Время жизни UTM метки (ms).\n */\n private readonly utmLifeTime?: number = inject(SC_CACHE_LIFETIME).utm;\n\n /**\n * {@link Observable} UTM-метка страницы.\n */\n private readonly utm$: Observable<ScUTM | null> = inject(WA_STORAGE_EVENT).pipe(\n filterByKey('utm'),\n toValue(),\n startWith(this.getUTMParams()),\n map((utmString) => (utmString === null ? utmString : (JSON.parse(utmString) as ScUTM)))\n );\n\n /**\n * {@link Observable} timestamp сохранения UTM в {@link Storage}.\n */\n private readonly utmTimestamp$ = inject(WA_STORAGE_EVENT).pipe(\n filterByKey('utmTimestamp'),\n toValue(),\n startWith(this.getUTMTimestamp()),\n map((timestamp) => (isString(timestamp) ? Number(timestamp) : timestamp))\n );\n\n /**\n * {@link Observable} UTM-метки страницы из параметров роутинга.\n */\n private readonly utmParamsFromRoute$: Observable<ScUTM> = this.router.events.pipe(\n filter((event) => Boolean(this.storage) && this.isBrowser && event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n startWith(this.activatedRoute),\n map((route) => route.snapshot.queryParams),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n filter((params): params is ScUTMParams => params['utm_source'] && params['utm_medium'] && params['utm_campaign']),\n map((params) => {\n return {\n source: params.utm_source,\n medium: params.utm_medium,\n campaign: params.utm_campaign,\n content: params.utm_content,\n term: params.utm_term,\n };\n })\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScUTMService}.\n */\n public constructor() {\n // При получении UTM-метки сохраняем ее в Storage и создаём запрос сохранения метки за клиентом.\n inject(SC_USER_INFO)\n .pipe(\n switchMap(() => this.utmParamsFromRoute$),\n tap(() => {\n this.updateTimestamp();\n }),\n filter((utm) => !this.isExistingUTM(utm)),\n tap((utm) => {\n this.setUTM(utm);\n }),\n switchMap((utm) => this.saveUTM$(utm))\n )\n .subscribe();\n }\n\n /**\n * Возвращает строчное представление параметров UTM из {@link Storage}.\n */\n private getUTMParams(): string | null {\n return Boolean(this.storage) && this.isBrowser ? this.storageService.getItem('utm') : null;\n }\n\n /**\n * Возвращает строчное представление timestamp сохранения UTM из {@link Storage}.\n */\n private getUTMTimestamp(): string | null {\n return Boolean(this.storage) && this.isBrowser ? this.storageService.getItem('utmTimestamp') : null;\n }\n\n /**\n * Устанавливает UTM-метку страницы в {@link Storage}.\n *\n * @param utm Данные о UTM-метке.\n */\n private setUTM(utm: ScUTM): void {\n if (this.storage && this.isBrowser && !this.isExistingUTM(utm)) {\n this.storageService.setItem('utm', JSON.stringify(utm));\n }\n }\n\n /**\n * Удаляет UTM-метку страницы из {@link Storage}.\n */\n public removeUTM(): void {\n if (this.storage && this.isBrowser) {\n this.storageService.removeItem('utm');\n this.storageService.removeItem('utmTimestamp');\n }\n }\n\n /**\n * Возвращает {@link Observable} данных о UTM-метке.\n */\n public getUTM$(): Observable<ScUTM | null> {\n return combineLatest({\n utm: this.utm$,\n timestamp: this.utmTimestamp$,\n }).pipe(map(({ utm, timestamp }) => (!this.utmLifeTime || (timestamp && timestamp + this.utmLifeTime > Date.now()) ? utm : null)));\n }\n\n /**\n * Возвращает {@link Observable} сохранения {@link ScUTM}.\n *\n * @param utm Данные о UTM-метке.\n */\n public saveUTM$(utm: ScUTM): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/utm`, utm);\n }\n\n /**\n * Проверяет, существует ли уже сохраненная UTM-метка.\n *\n * @param utm Данные о UTM-метке.\n */\n private isExistingUTM(utm: ScUTM): boolean {\n const existingUTM = this.getUTMParams();\n return existingUTM ? isMatch(utm, JSON.parse(existingUTM) as ScUTM) : false;\n }\n\n /**\n * Обновляет timestamp сохранения UTM в {@link Storage}.\n */\n private updateTimestamp(): void {\n if (this.getUTMParams()) {\n this.storageService.setItem('utmTimestamp', JSON.stringify(Date.now()));\n }\n }\n}\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { Inject, inject, Injectable } from '@angular/core';\nimport { first, map, Observable, shareReplay, switchMap, tap } from 'rxjs';\n\nimport { ScIFeedbackAPI } from '../../config';\nimport { SC_AUTH_ADD_HEADER_REQUIRED } from '../../httpInterceptors/tokens/sc-auth-add-header-required';\nimport { SC_IS_HEADER_REQUIRED } from '../../httpInterceptors/tokens/sc-is-header-required';\nimport { ScIReferencesTypes } from '../../references/dto/sc-i-references-types';\nimport { SC_FEEDBACK_API } from '../../tokens/sc-feedback-api';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { ScUTMService } from '../../utm/services/sc-utm.service';\nimport { ScIFeedbackMessage } from '../dto';\nimport { ScFeedbackForms } from '../enums/sc-feedback-forms';\n\n/**\n * Сервис обратной связи.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScFeedbackService {\n /**\n * Сервис для работы с UTM-метками.\n */\n private readonly utmService: ScUTMService = inject(ScUTMService);\n\n /**\n * Список форм обратной связи.\n */\n public readonly feedbackForms$: Observable<Array<ScIReferencesTypes<ScFeedbackForms>>> = this.http\n .get<Array<ScIReferencesTypes<ScFeedbackForms>>>(`${this.feedbackApi.apiUrl}/feedback/forms`, {\n context: new HttpContext().set(SC_AUTH_ADD_HEADER_REQUIRED, false).set(SC_IS_HEADER_REQUIRED, false),\n headers: {\n [this.feedbackApi.authTokenName]: this.feedbackApi.authToken,\n },\n })\n .pipe(shareReplay(1));\n\n /**\n * Инициализирует экземпляр класса {@link ScFeedbackService}.\n *\n * @param http HTTP-клиент.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param feedbackApi Данные для взаимодействия с API обратной связи.\n */\n public constructor(\n private readonly http: HttpClient,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Inject(SC_FEEDBACK_API)\n private readonly feedbackApi: ScIFeedbackAPI\n ) {}\n\n /**\n * Отправляет сообщение обратной связи.\n *\n * @param formSlug Символьное обозначение (slug) формы.\n * @param feedbackMessage Объект сообщения обратной связи.\n */\n public sendFeedback(formSlug: ScFeedbackForms, feedbackMessage: ScIFeedbackMessage): Observable<undefined> {\n return this.utmService.getUTM$().pipe(\n first(),\n map((utm) => (utm ? { ...feedbackMessage, utm } : feedbackMessage)),\n switchMap((data) =>\n this.http.post<undefined>(`${this.feedbackApi.apiUrl}/feedback/${formSlug}`, data, {\n context: new HttpContext().set(SC_AUTH_ADD_HEADER_REQUIRED, false).set(SC_IS_HEADER_REQUIRED, false),\n headers: {\n [this.feedbackApi.authTokenName]: this.feedbackApi.authToken,\n },\n })\n ),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.feedbackSent,\n });\n })\n );\n }\n}\n","/* eslint-disable no-param-reassign */\n\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, first, map, Observable, shareReplay, switchMap, tap } from 'rxjs';\n\nimport { ScAuthService } from '../../auth';\nimport { ScIUrls } from '../../config';\nimport { ScICity, ScIRegionWithCities } from '../../locations';\nimport { SC_URLS } from '../../tokens';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScIContactAndMedia, ScIDirectionManagerContact, ScIOrgContact, ScIRequisites, ScISocialMedia } from '../dto';\nimport { ScIRetailContact } from '../dto/sc-i-retail-contact';\n\n/**\n * Сервис для работы с реквизитами и с обойной связью.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScRequisitesService {\n /**\n * {@link BehaviorSubject} поискового запроса на странице контактов.\n */\n private searchTerm$: BehaviorSubject<string | null> = new BehaviorSubject<string | null>(null);\n\n /**\n * {@link Map} коллекция пар ключ-значение для контактов менеджера по направлению продаж.\n */\n private idManagerMap: Map<number, ScIDirectionManagerContact> = new Map<number, ScIDirectionManagerContact>();\n\n /**\n * Создаёт запрос получения списка всех контактов.\n */\n public contacts$: Observable<ScIContactAndMedia> = inject(SC_USER_INFO).pipe(\n switchMap(() => this.http.get<ScIContactAndMedia>(`${this.urls.apiUrl}/contacts`)),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос получения списка контактов для решения возникающих вопросов.\n */\n public personal$: Observable<ScIOrgContact[]> = this.contacts$.pipe(map((contacts: ScIContactAndMedia) => contacts.personal));\n\n /**\n * Создаёт запрос получения списка контактов розничных магазинов.\n */\n public retail$: Observable<ScIRetailContact[] | undefined> = this.contacts$.pipe(\n map((contacts: ScIContactAndMedia) => contacts.retail),\n first(),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос получения списка ссылок на социальные сети и другие каналы коммуникации.\n */\n public socialMedia$: Observable<ScISocialMedia[]> = this.contacts$.pipe(\n map((contacts: ScIContactAndMedia) => contacts.socialMedia),\n first(),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос получения списка контактов менеджеров по направлениям продаж.\n */\n public directions$: Observable<Partial<Record<number, ScIDirectionManagerContact[]>>> = this.contacts$.pipe(\n map((contacts: ScIContactAndMedia) => contacts.directions),\n tap((directions) => {\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in directions) {\n directions[Number.parseFloat(key)]?.forEach((manager) => {\n this.mapManagers(Number.parseFloat(key), manager);\n });\n }\n }),\n first(),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос получения списка реквизитов компании.\n */\n public requisites$: Observable<ScIRequisites> = this.http.get<ScIRequisites>(`${this.urls.apiUrl}/requisites`).pipe(shareReplay(1));\n\n /**\n * Инициализирует экземпляр класса {@link ScRequisitesService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n * @param authService Сервис аутентификации.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n private readonly authService: ScAuthService\n ) {}\n\n /**\n * Устанавливает поисковый запрос в {@link BehaviorSubject}.\n *\n * @param term Поисковый запрос.\n */\n public setSearchTermChange(term: string | null): void {\n this.searchTerm$.next(term);\n }\n\n /**\n * Возвращает {@link Observable} поискового запроса.\n */\n public getSearchTermChange$(): Observable<string | null> {\n return this.searchTerm$.asObservable();\n }\n\n /**\n * Возвращает поисковый запрос.\n */\n public getCurrentSearchTerm(): string | null {\n return this.searchTerm$.getValue();\n }\n\n /**\n * Проходит по древовидному представлению контактов менеджеров и записывает каждого менеджера в {@link Map} по ключу идентификатора.\n *\n * @param directionId Идентификатор направления продаж.\n * @param manager Контакты менеджера по направлению продаж.\n */\n private mapManagers(directionId: number, manager: ScIDirectionManagerContact): void {\n if (!manager.id) return;\n\n manager.directionId = directionId;\n this.idManagerMap.set(manager.id, this.sortManagerCities(manager));\n\n if (!manager.managers) return;\n\n manager.managers.forEach((subManager) => {\n this.mapManagers(directionId, subManager);\n });\n }\n\n /**\n * Сортирует города менеджера.\n *\n * @param manager Контакты менеджера по направлению продаж.\n */\n // eslint-disable-next-line class-methods-use-this\n private sortManagerCities(manager: ScIDirectionManagerContact): ScIDirectionManagerContact {\n manager.regions = manager.regions?.map<ScIRegionWithCities>((region) => {\n region.cities = region.cities?.sort((a: ScICity, b: ScICity) => {\n if (a.name > b.name) {\n return 1;\n }\n\n if (a.name < b.name) {\n return -1;\n }\n\n return 0;\n });\n return region;\n });\n\n return manager;\n }\n\n /**\n * Возвращает запись контакта менеджера по идентификатору.\n *\n * @param managerId Идентификатор менеджера.\n */\n public getManagerById(managerId: number): ScIDirectionManagerContact | undefined {\n return this.idManagerMap.get(managerId);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, filter, Observable, of, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\nimport { ScCachedItem } from '../../catalog/classes/sc-cached-item';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScContactsService } from '../../contacts/services/sc-contacts.service';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScIContact } from '../../user/dto/sc-i-contact';\nimport { ScIContactOnDataCreate } from '../../user/dto/sc-i-contact-on-data-create';\nimport { ScIContactWithRelations } from '../../user/dto/sc-i-contact-with-relations';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScContragent, ScContragentOnDataCreate, ScIBankAccountOnDataCreate } from '../dto';\nimport { ScIBankAccount } from '../dto/sc-i-bank-account';\n\n/**\n * Сервис работы с контрагентами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScContragentService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Сервис для работы с контактными лицами.\n */\n private readonly contactsService: ScContactsService = inject(ScContactsService);\n\n /**\n * {@link BehaviorSubject} обновления контрагентов.\n */\n private readonly contragentsUpdate$: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);\n\n /**\n * {@link Map} коллекция пар ключ-значение с данными о банковских счетах контрагентов.\n */\n private readonly contragentBankAccountsMap: Map<number, ScCachedItem<ScIBankAccount[]>> = new Map<number, ScCachedItem<ScIBankAccount[]>>();\n\n /**\n * {@link Observable} данных о контрагентах пользователя.\n */\n public readonly contragents$: Observable<ScContragent[] | null> = this.contragentsUpdate$.pipe(\n switchMap(() => this.user$),\n switchMap((user) => (user.isGuest ? of(null) : this.http.get<ScContragent[]>(`${this.urls.apiUrl}/user/contragents`).pipe(startWith(null)))),\n shareReplay(1)\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScContragentService}.\n *\n */\n public constructor() {\n this.user$.pipe(filter((user) => user.isGuest)).subscribe(() => {\n this.contactsService.contragentContactsMap.clear();\n this.contragentBankAccountsMap.clear();\n });\n }\n\n /**\n * Создаёт запрос создания нового контрагента.\n *\n * @param newContragent Данные нового контрагента.\n */\n public createContragent$(newContragent: ScContragentOnDataCreate): Observable<ScContragent> {\n return this.http.post<ScContragent>(`${this.urls.apiUrl}/user/contragents`, newContragent).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileContragentAdded,\n });\n }),\n tap(() => {\n this.contragentsUpdate$.next();\n })\n );\n }\n\n /**\n * Создаёт запрос на удаление контрагента.\n *\n * @param contragentId Идентификатор контрагента, которого необходимо удалить.\n */\n public deleteContragent$(contragentId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/user/contragents/${contragentId}`).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileContragentDeleted,\n params: { contragent_id: contragentId },\n });\n }),\n tap(() => {\n this.contragentsUpdate$.next();\n this.contragentBankAccountsMap.delete(contragentId);\n })\n );\n }\n\n /**\n * Создаёт запрос получения списка контактных лиц контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n */\n public getContragentContacts$(contragentId: number): Observable<ScIContact[] | null> {\n let cachedItem = this.contactsService.contragentContactsMap.get(contragentId);\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update() в будущем.\n cachedItem = new ScCachedItem(0, this.http.get<ScIContact[]>(`${this.urls.apiUrl}/user/contragents/${contragentId}/contacts`));\n this.contactsService.contragentContactsMap.set(contragentId, cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создаёт запрос создания контактного лица контрагенту.\n *\n * @param contragentId Идентификатор контрагента.\n * @param newContact Данные требуемые для создания контактного лица.\n * @returns Возвращает {@link Observable} созданного контактного лица.\n */\n public createContragentContact$(contragentId: number, newContact: ScIContactOnDataCreate): Observable<ScIContactWithRelations> {\n return this.contactsService.createContact$({ ...newContact, contragents: [{ id: contragentId }] });\n }\n\n /**\n * Создаёт запрос удаления контактного лица контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n * @param contactId Идентификатор контактного лица.\n */\n public deleteContragentContact$(contragentId: number, contactId: number): Observable<undefined> {\n return this.contactsService.deleteContact$(contactId).pipe(tap(() => this.contactsService.contragentContactsMap.get(contragentId)?.update()));\n }\n\n /**\n * Создаёт запрос получения списка банковских счетов контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n */\n public getContragentBankAccounts$(contragentId: number): Observable<ScIBankAccount[] | null> {\n let cachedItem = this.contragentBankAccountsMap.get(contragentId);\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().\n cachedItem = new ScCachedItem(0, this.http.get<ScIBankAccount[]>(`${this.urls.apiUrl}/user/contragents/${contragentId}/bank-accounts`));\n this.contragentBankAccountsMap.set(contragentId, cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создаёт запрос создания банковского счёта контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n * @param newBankAccount Данные требуемые для создания банковского счета.\n * @returns Возвращает {@link Observable} созданного счёта контрагента.\n */\n public createContragentBankAccount$(contragentId: number, newBankAccount: ScIBankAccountOnDataCreate): Observable<ScIBankAccount> {\n return this.http\n .post<ScIBankAccount>(`${this.urls.apiUrl}/user/contragents/${contragentId}/bank-accounts`, newBankAccount)\n .pipe(tap(() => this.contragentBankAccountsMap.get(contragentId)?.update()));\n }\n\n /**\n * Создаёт запрос удаления банковского счета контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n * @param bankAccountId Идентификатор банковского счета.\n */\n public deleteContragentBankAccount$(contragentId: number, bankAccountId: number): Observable<undefined> {\n return this.http\n .delete<undefined>(`${this.urls.apiUrl}/user/contragents/${contragentId}/bank-accounts/${bankAccountId}`)\n .pipe(tap(() => this.contragentBankAccountsMap.get(contragentId)?.update()));\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\nimport { ScCachedItem } from '../../catalog/classes/sc-cached-item';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScContactsService } from '../../contacts/services/sc-contacts.service';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScIContactOnDataCreate } from '../../user/dto/sc-i-contact-on-data-create';\nimport { ScIContactWithRelations } from '../../user/dto/sc-i-contact-with-relations';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScIDeliveryAddress, ScIDeliveryAddressOnDataCreate } from '../dto';\n\n/**\n * Сервис работы с адресами доставки.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScDeliveryAddressService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Сервис для работы с контактными лицами.\n */\n private readonly contactsService: ScContactsService = inject(ScContactsService);\n\n /**\n * {@link BehaviorSubject} обновление адресов доставки.\n */\n private readonly deliveryAddressesUpdate$: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);\n\n /**\n * {@link Observable} данных адресов доставки.\n */\n public readonly deliveryAddresses$: Observable<ScIDeliveryAddress[] | null> = this.deliveryAddressesUpdate$.pipe(\n switchMap(() => this.user$),\n switchMap((user) => (user.isGuest ? of(null) : this.http.get<ScIDeliveryAddress[]>(`${this.urls.apiUrl}/user/delivery-addresses`).pipe(startWith(null)))),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос создания нового адреса доставки.\n *\n * @param newAddresses Данные нового адреса.\n */\n public createDeliveryAddress$(newAddresses: ScIDeliveryAddressOnDataCreate): Observable<ScIDeliveryAddress> {\n return this.http.post<ScIDeliveryAddress>(`${this.urls.apiUrl}/user/delivery-addresses`, newAddresses).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileDeliveryAddressAdded,\n });\n }),\n tap(() => {\n this.deliveryAddressesUpdate$.next();\n })\n );\n }\n\n /**\n * Создаёт запрос на удаление адреса доставки.\n *\n * @param addressId Идентификатор адреса доставки, который необходимо удалить.\n */\n public deleteDeliveryAddress$(addressId: number): Observable<void> {\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n return this.http.delete<void>(`${this.urls.apiUrl}/user/delivery-addresses/${addressId}`).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileDeliveryAddressDeleted,\n params: { delivery_address_id: addressId },\n });\n }),\n tap(() => {\n this.deliveryAddressesUpdate$.next();\n this.contactsService.deliveryAddressContactsMap.delete(addressId);\n })\n );\n }\n\n /**\n * Создаёт запрос получения списка контактных лиц адреса доставки.\n *\n * @param addressId Идентификатор контрагента.\n */\n public getDeliveryAddressContacts$(addressId: number): Observable<ScIContactWithRelations[] | null> {\n let cachedItem = this.contactsService.deliveryAddressContactsMap.get(addressId);\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().\n cachedItem = new ScCachedItem(0, this.http.get<ScIContactWithRelations[]>(`${this.urls.apiUrl}/user/delivery-addresses/${addressId}/contacts`));\n this.contactsService.deliveryAddressContactsMap.set(addressId, cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создаёт запрос создания контактного лица адреса доставки.\n *\n * @param addressId Идентификатор адреса доставки.\n * @param newContact Данные требуемые для создания контактного лица.\n * @returns Возвращает {@link Observable} созданного контактного лица.\n */\n public createDeliveryAddressContact$(addressId: number, newContact: ScIContactOnDataCreate): Observable<ScIContactWithRelations> {\n return this.contactsService.createContact$({ ...newContact, addresses: [{ id: addressId }] });\n }\n\n /**\n * Создаёт запрос удаления контактного лица адреса доставки.\n *\n * @param addressId Идентификатор адреса доставки.\n * @param contactId Идентификатор контактного лица.\n */\n public deleteDeliveryAddressContact$(addressId: number, contactId: number): Observable<void> {\n return this.contactsService.deleteContact$(contactId).pipe(tap(() => this.contactsService.deliveryAddressContactsMap.get(addressId)?.update()));\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, shareReplay } from 'rxjs';\n\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScConvertersService } from '../../converters/services/sc-converters.service';\nimport { ScIPaginate } from '../../pagination/dto/sc-i-paginate';\nimport { SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT } from '../../tokens/sc-is-hidden-error-alert';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScFaqGroup, ScFaqItem, ScIFrequentlyAskedQuestionsPaginationParams } from '../interfaces';\n\n/**\n * Сервис для работы с часто задаваемыми вопросами (FAQ).\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScFrequentlyAskedQuestionsService {\n /**\n * Сервис для выполнения HTTP-запросов.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок на разделы backend.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * {@link Observable} списка группы часто задаваемых вопросов.\n */\n public readonly groups$: Observable<ScFaqGroup[]> = this.http.get<ScFaqGroup[]>(`${this.urls.apiUrl}/faq/groups`).pipe(shareReplay(1));\n\n /**\n * Создает запрос получения списка часто задаваемых вопросов с пагинацией.\n *\n * @param params Параметры пагинации часто задаваемых вопросов.\n */\n public getFrequentlyAskedQuestions$(params: ScIFrequentlyAskedQuestionsPaginationParams): Observable<ScIPaginate<ScFaqItem>> {\n return this.http.get<ScIPaginate<ScFaqItem>>(`${this.urls.apiUrl}/faq`, {\n params: this.convertersService.toHttpParams({ ...params }, { nonNullable: true }),\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n });\n }\n}\n","import { ScDocumentInfo } from './sc-document-info';\n\n/**\n * Данные о вложенности файлов или директорий.\n */\nexport class ScDocumentInfoNode {\n /**\n * Элемент файла или директории узла дерева файлов.\n */\n public item: ScDocumentInfo;\n\n /**\n * Вложенные файлы узла дерева файлов.\n */\n // eslint-disable-next-line no-use-before-define\n public files: ScDocumentInfoNode[];\n\n /**\n * Признак, что директория загружена.\n */\n public isLoaded: boolean;\n\n /**\n * Инициализирует экземпляр класса {@link ScDocumentInfoNode}.\n *\n * @param item Данные о файле или директории.\n */\n public constructor(item: ScDocumentInfo) {\n this.item = item;\n this.files = [];\n this.isLoaded = false;\n }\n}\n","/**\n * Перечисление типов записи о файле/директории.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScDocumentInfoTypesEnum {\n /**\n * Директория.\n */\n // eslint-disable-next-line unicorn/prevent-abbreviations\n dir = 'dir',\n\n /**\n * Файл.\n */\n file = 'file',\n\n /**\n * Ссылка на файл или видео со стороннего ресурса.\n */\n link = 'link',\n}\n","/**\n * Перечисление типов значков для вставки в тэг <i>.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScIconTypesEnum {\n /**\n * Иконка директории.\n */\n iconFolder = 'icon-folder',\n\n /**\n * Иконка ссылки.\n */\n iconLink = 'icon-link',\n\n /**\n * Иконка excel-файла.\n */\n iconExcelFile = 'icon-excel-file',\n\n /**\n * Иконка pdf-файла.\n */\n iconPdfFile = 'icon-pdf-file',\n\n /**\n * Иконка word-файла.\n */\n iconWordFile = 'icon-word-file',\n\n /**\n * Иконка файла изобажения.\n */\n iconImage = 'icon-image',\n\n /**\n * Иконка файла.\n */\n iconFile = 'icon-file',\n}\n","/* eslint-disable no-param-reassign */\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { ScDocumentInfo } from '../classes/sc-document-info';\nimport { ScDocumentInfoTypesEnum } from '../enums/sc-document-info-types-enum';\nimport { ScIconTypesEnum } from '../enums/sc-icon-types-enum';\n\n/**\n * Сервис получения информации о файлах и документах.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScFilesService {\n /**\n * Инициализирует экземпляр класса {@link ScFilesService}.\n *\n * @param http HTTP-клиент для выполнения запросов.\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(\n private http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls\n ) {}\n\n /**\n * Создает запрос получения списка файлов и/или директорий.\n * Возвращает содержимое корневой директории, если идентификатор не указан.\n *\n * @param directoryId Идентификатор записи директории, файлы которой необходимо получить.\n */\n public getFiles(directoryId?: number): Observable<ScDocumentInfo[]> {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return this.http.get<ScDocumentInfo[]>(`${this.urls.apiUrl}/files/${[directoryId]}`).pipe(\n tap((data) => {\n data.forEach((item) => {\n this.preProcessesData(item);\n });\n })\n );\n }\n\n /**\n * Обрабатывает данные после загрузки.\n *\n * @param document Данные о файле или директории.\n */\n // eslint-disable-next-line class-methods-use-this\n private preProcessesData(document: ScDocumentInfo): void {\n if (document.type === ScDocumentInfoTypesEnum.file) {\n document.fileFormat = document.link?.split('.').pop()?.toLowerCase();\n }\n\n switch (document.fileFormat ?? document.type) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n case ScDocumentInfoTypesEnum.dir:\n document.icon = ScIconTypesEnum.iconFolder;\n break;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n case ScDocumentInfoTypesEnum.link:\n document.icon = ScIconTypesEnum.iconLink;\n break;\n\n case 'xlsx':\n case 'xls':\n case 'csv':\n document.icon = ScIconTypesEnum.iconExcelFile;\n break;\n\n case 'pdf':\n document.icon = ScIconTypesEnum.iconPdfFile;\n break;\n\n case 'doc':\n case 'docx':\n document.icon = ScIconTypesEnum.iconWordFile;\n break;\n\n case 'jpeg':\n case 'jpg':\n case 'png':\n case 'gif':\n case 'bmp':\n case 'tiff':\n document.icon = ScIconTypesEnum.iconImage;\n break;\n\n default:\n document.icon = ScIconTypesEnum.iconFile;\n break;\n }\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, UrlTree } from '@angular/router';\nimport { concatMap, first, map, Observable, of } from 'rxjs';\n\nimport { ScAuthService } from '../auth';\nimport { SC_AUTH_AS_CLIENT_OPTIONS, ScAuthAsClientOptions } from '../tokens/notification-options';\n\n/**\n * Сервис аутентификации пользователя на основе ключей, переданных в параметрах запроса.\n */\n@Injectable()\nexport class ScAuthAsClientGuard {\n /**\n * Инициализирует экземпляр класса {@link AuthAsClientGuard}.\n *\n * @param authService Сервис аутентификации.\n * @param router Сервис маршрутизации.\n * @param options Параметры авторизации под клиентом.\n */\n public constructor(\n private authService: ScAuthService,\n private router: Router,\n @Inject(SC_AUTH_AS_CLIENT_OPTIONS)\n protected readonly options: ScAuthAsClientOptions\n ) {}\n\n /**\n * Разрешает/запрещает доступ к маршруту.\n *\n * @param route Данные о текущем маршруте.\n */\n // eslint-disable-next-line sonarjs/function-return-type\n public canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n const expiredAt: Date = new Date();\n expiredAt.setMinutes(new Date().getMinutes() + this.options.expiredAtMinute);\n\n return this.authService.getAuthChange().pipe(\n first(),\n // Если пользователь авторизирован, то завершаем сеанс.\n concatMap((state) => (state ? this.authService.getSignOut$(false) : of(null))),\n // Обновляем полученные ключи, чтобы они перестали действовать. getRefreshTokenObservable() запишет новые ключи в систему, после чего проложение само запросит нового пользователя.\n concatMap(() =>\n this.authService.getRefreshToken$({\n access: {\n token: route.paramMap.get('atoken') ?? '',\n expiredAt: expiredAt,\n },\n refresh: {\n token: route.paramMap.get('rtoken') ?? '',\n expiredAt: expiredAt,\n },\n })\n ),\n first(),\n map(() => this.router.createUrlTree(this.options.urlTree))\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { TUI_TRUE_HANDLER, tuiIsPresent } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of } from 'rxjs';\n\nimport { ScCatalogService } from '../catalog';\nimport { SC_ID_OR_SLUG_IN_ROUTE } from '../providers';\n\n/**\n * Страж выполняющий проверку маршрута товара и категории, и редиректа в зависимости от настроек окружения.\n *\n * @param route Сервис предоставляющий доступ к данным о маршруте.\n */\n// eslint-disable-next-line sonarjs/function-return-type\nexport const ScIdOrSlugGuard: CanActivateFn = (route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | boolean => {\n const { paramMap } = route;\n const categoryIdOrSlug = paramMap.get('categoryIdOrSlug');\n const productIdOrSlug = paramMap.get('productIdOrSlug');\n const idOrSlug: 'id' | 'slug' = inject<'id' | 'slug'>(SC_ID_OR_SLUG_IN_ROUTE);\n const router: Router = inject(Router);\n\n if (categoryIdOrSlug && /^\\d+$/.test(categoryIdOrSlug) !== (idOrSlug === 'id')) {\n return inject(ScCatalogService)\n .getCategoryCached$(categoryIdOrSlug)\n .pipe(\n filter(tuiIsPresent),\n // eslint-disable-next-line security/detect-object-injection\n map((category) => router.createUrlTree(['/catalog', category[idOrSlug]])),\n catchError(() => of(TUI_TRUE_HANDLER()))\n );\n }\n\n if (productIdOrSlug && /^\\d+$/.test(productIdOrSlug) !== (idOrSlug === 'id')) {\n return inject(ScCatalogService)\n .getProductData$(productIdOrSlug)\n .pipe(\n filter(tuiIsPresent),\n // eslint-disable-next-line security/detect-object-injection\n map((product) => router.createUrlTree(['/catalog', 'product', product[idOrSlug]])),\n catchError(() => of(TUI_TRUE_HANDLER()))\n );\n }\n\n return true;\n};\n","import { inject, Pipe, PipeTransform } from '@angular/core';\n\nimport { ScIUrls } from '../config/sc-i-urls';\nimport { SC_PATH_IMAGE_NOT_FOUND, SC_URLS } from '../tokens';\n\n/**\n * Пайп для формирования полного URI изображения на media сервере.\n */\n@Pipe({\n name: 'scMediaImageTransformer',\n standalone: true,\n})\nexport class ScMediaImageTransformerPipe implements PipeTransform {\n /**\n * Список ссылок на разделы backend'a.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Путь до изображения 'Товар не найден'.\n */\n private readonly pathImageNotFound: string = inject(SC_PATH_IMAGE_NOT_FOUND);\n\n /**\n * Формирует полный URI изображения на media сервере.\n *\n * @param image Путь до изображения.\n * @param useDefaultImage Признак использования изображения по умолчанию при отсутствии изображения.\n * @returns Полный URI до изображения или путь до изображения 'Товар не найден' если изображение отсутствует и useDefaultImage = true.\n */\n transform(image: string | undefined | null, useDefaultImage: true): string;\n\n transform(image: string | undefined | null, useDefaultImage?: false): string | undefined;\n\n transform(image: string | undefined | null, useDefaultImage?: boolean): string | undefined {\n if (!image) {\n return useDefaultImage ? this.pathImageNotFound : undefined;\n }\n\n return image.startsWith('/') ? this.urls.imgServerUrl + image : `${this.urls.imgServerUrl}/${image}`;\n }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { ScProduct } from '../catalog/dto';\nimport { ScImage } from '../common/classes/sc-image';\nimport { ScIImage } from '../common/interfaces/sc-i-image';\nimport { ScMediaImageTransformerPipe } from '../pipes/sc-media-image-transformer.pipe';\n\n/**\n * Класс с вспомогательными методами для работы с изображениями.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScImageHelper {\n /**\n * Список ссылок на разделы backend'a.\n */\n private readonly mediaImageTransformerPipe: ScMediaImageTransformerPipe = inject(ScMediaImageTransformerPipe);\n\n /**\n * Возвращает изображение товара по индексу.\n *\n * @param product Позиция товара/услуги.\n * @param imgIndex Индекс изображения в массиве.\n * @returns Возвращает изображение товара по индексу. Возвращает пути до изображения 'Товар не найден' {@link pathImageNotFound} если изображения по индексу не найдено.\n */\n public getImage(product: ScProduct, imgIndex: number = 0): ScIImage {\n return {\n image: this.mediaImageTransformerPipe.transform(product.getImage(imgIndex), true),\n alt: `Изображение товара ${product.name} №${imgIndex + 1}`,\n imageWebp: this.mediaImageTransformerPipe.transform(product.getImageWebp(imgIndex), false),\n };\n }\n\n /**\n * Возвращает превью-изображение товара по индексу.\n *\n * @param product Позиция товара/услуги.\n * @param previewIndex Индекс превью-изображения в массиве.\n * @returns Возвращает превью-изображение товара по индексу. Возвращает основное изображение если превью-изображения по индексу не найдено.\n */\n public getImagePreview(product: ScProduct, previewIndex: number = 0): ScIImage {\n return {\n image: this.mediaImageTransformerPipe.transform(product.getImagePreview(previewIndex) ?? product.getImage(previewIndex), true),\n alt: `Изображение предварительного просмотра товара ${product.name} №${previewIndex + 1}`,\n imageWebp: this.mediaImageTransformerPipe.transform(product.getImagePreviewWebp(previewIndex) ?? product.getImageWebp(previewIndex), false),\n };\n }\n\n /**\n * Возвращает массив изображений товара.\n *\n * @param product Позиция товара/услуги.\n * @param useDefaultImage Признак использования изображения по умолчанию при отсутствии изображений.\n */\n public getProductImageList(product: ScProduct, useDefaultImage: true): ScIImage[];\n\n public getProductImageList(product: ScProduct, useDefaultImage?: false): ScIImage[] | undefined;\n\n public getProductImageList(product: ScProduct, useDefaultImage?: boolean): ScIImage[] | undefined {\n const images = product.images?.filter((image) => image.image).map((_, index) => this.getImage(product, index));\n\n if (images?.length) {\n return images;\n }\n\n if (useDefaultImage) {\n return [new ScImage(this.mediaImageTransformerPipe.transform(undefined, true), `Изображение товара ${product.name} не найдено`)];\n }\n\n return undefined;\n }\n\n /**\n * Возвращает массив превью-изображений товара.\n *\n * @param product Данные о товаре/услуге.\n * @param useDefaultImage Признак использования изображения по умолчанию при отсутствии изображений.\n */\n public getProductImagePreviewList(product: ScProduct, useDefaultImage: true): ScIImage[];\n\n public getProductImagePreviewList(product: ScProduct, useDefaultImage?: false): ScIImage[] | undefined;\n\n public getProductImagePreviewList(product: ScProduct, useDefaultImage?: boolean): ScIImage[] | undefined {\n const images = product.images?.filter((image) => image.preview).map((_, index) => this.getImagePreview(product, index));\n\n if (images?.length) {\n return images;\n }\n\n if (useDefaultImage) {\n return [new ScImage(this.mediaImageTransformerPipe.transform(undefined, true), `Изображение предварительного просмотра товара ${product.name} не найдено`)];\n }\n\n return undefined;\n }\n\n /**\n * Возвращает признак того, что файл является изображением.\n *\n * @param format Формат файла.\n */\n // eslint-disable-next-line class-methods-use-this\n public isImg(format: string): boolean {\n return ['jpeg', 'jpg', 'png', 'gif', 'bmp', 'tiff', 'webp'].includes(format);\n }\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport { ScProduct } from '../catalog';\nimport { SC_LINEAR_VALUES_TOKEN } from '../tokens';\n\n/**\n * Клас-помощник для работы со значениями единиц измерения товара.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUnitsHelper {\n /**\n * Инициирует экземпляр класса {@link ScUnitsHelper}.\n *\n * @param linearValues Единицы измерения линейной величины.\n */\n public constructor(@Inject(SC_LINEAR_VALUES_TOKEN) public readonly linearValues: string[]) {}\n\n /**\n * Возвращает признак возможности продажи товара на метраж.\n *\n * @param product Товар для которого нужно проверить возможность продажи на метраж.\n */\n public productIsMeasurable(product: ScProduct): boolean {\n return this.linearValues.includes(product.unit);\n }\n\n /**\n * Возвращает кратность количества для товара.\n *\n * @param product Товар для которого нужно вернуть кратность количества.\n */\n public productMultiplicity(product: ScProduct): number {\n return product.minCount && !this.linearValues.includes(product.unit) ? product.minCount : 1;\n }\n\n /**\n * Возвращает значение кратности, для проверки кратности количества товара.\n *\n * @param product Товар для которого нужно вернуть значение кратность.\n */\n public productStepForValidator(product: ScProduct): number {\n return product.ignoreMinCountCheck ? 1 : this.productMultiplicity(product);\n }\n}\n","/**\n * Модель данных настроек кэширования запросов.\n */\nexport class ScCacheSettings {\n /**\n * Признак необходимости кэшировать ответ на запрос.\n */\n public isCached: boolean;\n\n /**\n * Время жизни закэшированного ответа.\n */\n public cacheLifeTime: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScCacheSettings}.\n *\n * @param isCached Признак необходимости кэшировать ответ на запрос.\n * @param cacheLifeTime Время жизни закэшированного ответа.\n */\n public constructor(isCached: boolean, cacheLifeTime: number) {\n this.isCached = isCached;\n this.cacheLifeTime = cacheLifeTime;\n }\n}\n","import { HttpContextToken } from '@angular/common/http';\n\nimport { ScCacheSettings } from '../classes/sc-cache-settings';\n\n/**\n * Токен настроек кэширования запроса.\n */\nexport const SC_CACHE_SETTINGS: HttpContextToken<ScCacheSettings> = new HttpContextToken<ScCacheSettings>(() => new ScCacheSettings(false, 0));\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен списка URL, которые нужно кешировать для гостя.\n */\nexport const SC_GUEST_ENDPOINTS_TOKEN = tuiCreateToken<string[]>([]);\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен имени параметра, при котором кешируются запросы у гостя.\n */\nexport const SC_GUEST_PARAMETER_NAME_TOKEN = tuiCreateToken<string>('');\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ScTokenService } from '../auth';\nimport { SC_AUTH_ADD_HEADER_REQUIRED, SC_IS_HEADER_REQUIRED } from './tokens';\n\n/**\n * Перехватчик запросов для реализации аутентификации.\n */\n@Injectable()\nexport class ScAuthInterceptor implements HttpInterceptor {\n /**\n * Инициализирует экземпляр класса {@link ScAuthInterceptor}.\n *\n * @param tokenService Сервис ключей аутентификации.\n */\n public constructor(private tokenService: ScTokenService) {}\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.context.get<boolean>(SC_IS_HEADER_REQUIRED) && request.context.get<boolean>(SC_AUTH_ADD_HEADER_REQUIRED)) {\n return next.handle(request.clone(this.tokenService.addAuthHeader(request)));\n }\n\n return next.handle(request);\n }\n}\n","import { HttpResponse } from '@angular/common/http';\n\n/**\n * Модель данных закэшированного {@link HttpResponse}.\n *\n * @internal\n */\nexport class ScCachedResponse<T> {\n /**\n * Время загрузки ответа.\n */\n public loadedAt: Date;\n\n /**\n * Кэшируемый ответ на запрос.\n */\n public response: HttpResponse<T>;\n\n /**\n * Инициализирует экземпляр класса {@link ScCachedResponse}.\n *\n * @param response ответ на запрос, который необходимо закэшировать.\n */\n public constructor(response: HttpResponse<T>) {\n this.loadedAt = new Date();\n this.response = response;\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, of, tap } from 'rxjs';\n\nimport { ScCacheSettings } from './classes';\nimport { ScCachedResponse } from './internal/classes/sc-cached-response';\nimport { SC_CACHE_SETTINGS } from './tokens';\n\n/**\n * Перехватчик запросов для кэширования результатов.\n */\n@Injectable()\nexport class ScCacheInterceptor implements HttpInterceptor {\n /**\n * Коллекция пар ключ-значение для результатов запросов по строке запроса.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private cache: Map<string, ScCachedResponse<any>> = new Map<string, ScCachedResponse<any>>();\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.context.get<ScCacheSettings>(SC_CACHE_SETTINGS).isCached) {\n const cachedResponse = this.cache.get(request.url);\n\n if (cachedResponse && cachedResponse.loadedAt.getTime() > Date.now() - request.context.get<ScCacheSettings>(SC_CACHE_SETTINGS).cacheLifeTime) {\n return of(cachedResponse.response);\n }\n\n return next.handle(request).pipe(\n tap((response) => {\n if (response instanceof HttpResponse) {\n this.cache.set(request.url, new ScCachedResponse(response));\n }\n })\n );\n }\n\n return next.handle(request);\n }\n}\n","/* eslint-disable security/detect-object-injection */\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { catchError, map, Observable, throwError } from 'rxjs';\nimport { objectToCamel, objectToSnake, toSnake } from 'ts-case-convert';\n\nimport { ScIUrls } from '../config';\nimport { SC_URLS } from '../tokens';\n\n/**\n * Перехватчик для конвертации данных.\n */\n@Injectable()\nexport class ScConvertInterceptor implements HttpInterceptor {\n /**\n * Инициализирует экземпляр класса {@link ScConvertInterceptor}.\n *\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(@Inject(SC_URLS) private readonly urls: ScIUrls) {}\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.responseType !== 'json' || !request.url.includes(this.urls.apiUrl)) {\n return next.handle(request);\n }\n\n return next.handle(request.clone({ params: this.httpParamsToSnake(request.params), body: objectToSnake(request.body) })).pipe(\n map((event) => {\n if (event instanceof HttpResponse) {\n return event.clone({\n body: objectToCamel(event.body),\n });\n }\n\n return event;\n }),\n catchError((error: HttpErrorResponse) =>\n throwError(\n () =>\n new HttpErrorResponse({\n error: objectToCamel(error.error),\n headers: error.headers,\n status: error.status,\n statusText: error.statusText,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n url: error.url!,\n })\n )\n )\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n private httpParamsToSnake(params: HttpParams): HttpParams {\n // eslint-disable-next-line unicorn/no-array-reduce\n const newObje = params.keys().reduce((object: Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>, key: string) => {\n const parameter = params.getAll(key);\n\n if (parameter) {\n // eslint-disable-next-line no-param-reassign\n object[toSnake(key)] = parameter;\n }\n\n return object;\n }, {});\n\n return new HttpParams().appendAll(newObje);\n }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, catchError, filter, finalize, first, Observable, of, switchMap, takeUntil, throwError } from 'rxjs';\n\nimport { ScAuthService, ScTokenService } from '../auth';\nimport { ScIApiKeys } from '../config';\nimport { SC_API_KEYS } from '../tokens';\nimport { SC_IS_HEADER_REQUIRED, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED } from './tokens';\n\n/**\n * Перехватчик обработки ошибок запросов.\n */\n@Injectable()\nexport class ScErrorsInterceptor implements HttpInterceptor {\n /**\n * Наблюдаемый признак того, что токен в данный момент обновляется.\n */\n private isTokenRefreshing$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n /**\n * Инициализирует экземпляр класса {@link ScErrorsInterceptor}.\n *\n * @param apiKeys Данные о API ключах.\n * @param tokenService Сервис для работы с ключами аутентификации.\n * @param authService Сервис аутентификации.\n */\n public constructor(\n @Inject(SC_API_KEYS) private readonly apiKeys: ScIApiKeys,\n private readonly tokenService: ScTokenService,\n private readonly authService: ScAuthService\n ) {}\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse) => {\n // TODO: TASK[#4511]: Обработка и вывод ошибок работы с API.\n // eslint-disable-next-line sonarjs/no-small-switch\n switch (error.status) {\n case 401:\n if (request.context.get<boolean>(SC_IS_LOGOUT_REQUEST)) {\n this.tokenService.removeAuthToken();\n\n return of();\n }\n\n if (request.headers.has(this.apiKeys.guestKeyName)) {\n this.tokenService.removeGuestToken();\n\n return of();\n }\n\n if (\n request.context.get<boolean>(SC_IS_HEADER_REQUIRED) &&\n request.headers.has(this.apiKeys.keyName) &&\n !request.context.get<boolean>(SC_IS_REFRESH_REQUIRED)\n ) {\n return this.handle401Error(request, next);\n }\n\n return throwError(() => error);\n default:\n return throwError(() => error);\n }\n })\n );\n }\n\n /**\n * Обработчик 401 ошибки.\n *\n * @param request Запрос, который выдал ошибку.\n * @param next Следующий перехватчик в цепочке перехватчиков.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handle401Error(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!this.isTokenRefreshing$.getValue()) {\n this.isTokenRefreshing$.next(true);\n\n return this.authService.getRefreshToken$().pipe(\n switchMap(() => {\n this.isTokenRefreshing$.next(false);\n\n return next.handle(request.clone(this.tokenService.addAuthHeader(request)));\n }),\n catchError((error: HttpErrorResponse) => {\n if (error.status === 401) {\n this.tokenService.removeAuthToken();\n\n return of();\n }\n\n return throwError(() => error);\n })\n );\n }\n return this.isTokenRefreshing$.pipe(\n filter((isRefreshing) => !isRefreshing),\n first(), // Для запуска цепочки повторного вызова запросов нужен один сигнал.\n switchMap(() => next.handle(this.tokenService.addAuthHeader(request))),\n finalize(() => {\n this.isTokenRefreshing$.next(false);\n }),\n takeUntil(this.authService.getAuthChange().pipe(filter((state) => !state)))\n );\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ScIAppRelease } from '../config';\nimport { SC_RELEASE } from '../tokens';\nimport { SC_IS_HEADER_REQUIRED } from './tokens';\n\n/**\n * Перехватчик запросов для внедрения опций приложения в заголовок.\n */\n@Injectable()\nexport class ScOptionsInterceptor implements HttpInterceptor {\n /**\n * Заголовки опций приложения.\n */\n private readonly headers: Record<string, string | string[]> = {\n 'APP-VERSION': `${this.release.name} (${this.release.version}, ${this.release.date})`,\n };\n\n /**\n * Инициализирует экземпляр класса {@link ScOptionsInterceptor}.\n *\n * @param release Данные о текущем выпуске приложения.\n */\n public constructor(@Inject(SC_RELEASE) private readonly release: ScIAppRelease) {}\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.context.get<boolean>(SC_IS_HEADER_REQUIRED)) {\n return next.handle(\n request.clone({\n setHeaders: this.headers,\n })\n );\n }\n\n return next.handle(request);\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { first, Observable, switchMap } from 'rxjs';\n\nimport { ScUser } from '../user/dto/sc-user';\nimport { SC_USER_INFO } from '../user/tokens/sc-user-providers';\nimport { SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN } from './tokens';\n\n/**\n * Перехватчик запросов API для добавления в них параметра при котором кешируются запросы у гостя.\n */\n@Injectable()\nexport class ScGuestInterceptor implements HttpInterceptor {\n /**\n * Список URL которые нужно кешировать для гостя.\n */\n private readonly guestEndpoints: string[] = inject(SC_GUEST_ENDPOINTS_TOKEN);\n\n /**\n * Имя параметра, при котором кешируются запросы у гостя.\n */\n private readonly guestParameterName: string = inject(SC_GUEST_PARAMETER_NAME_TOKEN);\n\n /**\n * Сервис аутентификации пользователей.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /** @inheritDoc */\n public intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n const isGuestEndpoint = this.guestEndpoints.some((endpoint) => request.url.includes(endpoint));\n\n if (!isGuestEndpoint) {\n return next.handle(request);\n }\n\n return this.user$.pipe(\n first(),\n switchMap((user) => (user.isGuest ? next.handle(request.clone({ params: request.params.append(this.guestParameterName, true) })) : next.handle(request)))\n );\n }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { format, isValid, parse } from 'date-fns';\nimport { isArray, isString } from 'lodash-es';\nimport { catchError, Observable, throwError } from 'rxjs';\n\nimport { ScIApiErrorResponse } from '../auth/interfaces';\nimport { ScIDateFormat } from '../config/sc-i-date-format';\nimport { SC_DATE_FORMAT } from '../tokens/sc-date-format';\n\n/**\n * Перехватчик для форматирования дат в ошибках запросов к API.\n */\n@Injectable()\nexport class ScDateFormatInterceptor implements HttpInterceptor {\n /**\n * Формат дат.\n */\n private readonly dateFormats: ScIDateFormat = inject(SC_DATE_FORMAT);\n\n /** @inheritDoc */\n public intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse) => {\n const errorData = error.error as ScIApiErrorResponse;\n this.formatDatesInErrors(errorData);\n return throwError(() => error);\n })\n );\n }\n\n /**\n * Форматирует даты в ошибках запросов к API.\n *\n * @param error Объект с ошибками API.\n */\n private formatDatesInErrors(error: ScIApiErrorResponse): void {\n const { errors, message } = error;\n\n // Форматируем основное сообщение об ошибке\n if (message) {\n // eslint-disable-next-line no-param-reassign\n error.message = this.formatDateInString(message);\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const key in errors) {\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n const fieldErrors = errors[key];\n\n if (isArray(fieldErrors)) {\n fieldErrors.forEach((errorMessage, index) => {\n if (isString(errorMessage)) {\n // eslint-disable-next-line security/detect-object-injection\n fieldErrors[index] = this.formatDateInString(errorMessage);\n }\n });\n }\n }\n }\n }\n\n /**\n * Форматирует даты в строке.\n *\n * @param text Исходная строка.\n */\n private formatDateInString(text: string): string {\n // Ищем даты в формате yyyy-MM-dd HH:mm:ss.\n const dateRegex = /(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})/g;\n\n return text.replaceAll(dateRegex, (match) => {\n try {\n const parsedDate = parse(match, this.dateFormats.api, new Date());\n if (isValid(parsedDate)) {\n return format(parsedDate, this.dateFormats.uiDate);\n }\n } catch {\n // Если не удалось распарсить дату, ничего не делаем.\n }\n return match;\n });\n }\n}\n","/**\n * Перечисление организационно-правовых форм.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScOpfList {\n /**\n * Физическое лицо.\n */\n individual = 1,\n\n /**\n * Индивидуальный предприниматель.\n */\n entrepreneur = 2,\n\n /**\n * Юридическое лицо.\n */\n legal = 3,\n\n /**\n * Юридическое лицо (нерезидент).\n */\n non_resident_legal = 4,\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { ScReferencesService } from '../services/sc-references.service';\n\n/**\n * Перечисление статусов заказа.\n * Ключами являются символьные обозначения (slug) статусов заказа, из запроса {@link ScReferencesService.statuses}\n */\n// eslint-disable-next-line no-shadow\nexport enum ScOrderStateStatus {\n /**\n * Черновик.\n */\n draft = 0,\n\n /**\n * Принято в обработку.\n */\n new = 1,\n\n /**\n * В обработке.\n */\n worked_out = 2,\n\n /**\n * Обрабатывается.\n */\n pending = 3,\n\n /**\n * Отправлено клиенту.\n */\n completed = 4,\n\n /**\n * Отменён.\n */\n declined = 5,\n\n /**\n * Удалён.\n */\n deleted = 6,\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { ScReferencesService } from '../services/sc-references.service';\n\n/**\n * Перечисление статусов отплат заказа.\n * Ключами являются символьные обозначения (slug) статусов отплат заказа, из запроса {@link ScReferencesService.paymentStatuses}\n */\n// eslint-disable-next-line no-shadow\nexport enum ScPaymentStatus {\n /**\n * Данные об оплате отсутствуют.\n */\n none = 0,\n\n /**\n * Пользователю отправлена ссылка на оплату.\n */\n sent_payment_link = 1,\n\n /**\n * Пользователь перешёл на страницу оплаты заказа.\n */\n goto_payment_page = 2,\n\n /**\n * Пользователь успешно оплатил заказ на странице оплаты.\n */\n success_by_user = 3,\n\n /**\n * Во время оплаты заказа пользователем на странице оплаты произошла ошибка, либо пользователь отказался от оплаты.\n */\n error_by_user = 4,\n\n /**\n * Ожидается оплата выставленного счёта.\n */\n paid_waiting = 10,\n\n /**\n * Средства успешно заблокированы.\n */\n paid_authorized = 11,\n\n /**\n * Оплачен.\n */\n paid = 12,\n\n /**\n * Подтверждение оплаты оператором.\n */\n confirmed = 20,\n\n /**\n * Завершение заказа оператором (выдача).\n */\n completed = 30,\n\n /**\n * Оплата отменена.\n */\n cancelled = 40,\n\n /**\n * Оплата отменена пользователем.\n */\n cancelled_by_client = 45,\n\n /**\n * Частичный возврат средств.\n */\n refund_partial = 50,\n\n /**\n * Полный возврат средств.\n */\n refund = 55,\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { ScReferencesService } from '../services/sc-references.service';\n\n/**\n * Перечисление статусов рекламаций.\n * Ключами являются символьные обозначения (slug) статусов заказа, из запроса {@link ScReferencesService.feedbackForm$}\n */\n// eslint-disable-next-line no-shadow\nexport enum ScReclamationStatus {\n /**\n * Получено от клиента.\n */\n initiated = 1,\n\n /**\n * Не хватает информации.\n */\n info_required = 2,\n\n /**\n * Ожидает решения.\n */\n pending = 3,\n\n /**\n * Вынесено решение.\n */\n completed = 4,\n}\n","import { inject, Injectable } from '@angular/core';\nimport { tuiPure } from '@taiga-ui/cdk';\nimport { Observable } from 'rxjs';\n\nimport { ScReferenceName, ScReferencesService } from '../../references';\nimport { ScICity, ScICityWithRegion, ScICityWithRegionAndCountry, ScICountry, ScIRegion, ScIRegionWithCountry } from '../dto';\n\n/**\n * Сервис для получения списков стран, регионов, городов.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScLocationsService {\n /**\n * Сервис справочников.\n */\n private readonly referencesService = inject(ScReferencesService);\n\n /**\n * Создает запрос получения списка стран.\n */\n @tuiPure\n public getCountries$(): Observable<ScICountry[]> {\n return this.referencesService.getReference$<ScICountry[]>(ScReferenceName.country);\n }\n\n /**\n * Создает запрос получения списка регионов указанной страны.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n */\n @tuiPure\n public getRegions$(countryId: number): Observable<ScIRegion[]> {\n return this.referencesService.getReference$<ScIRegion[]>(ScReferenceName.region, { countryId: countryId });\n }\n\n /**\n * Создает запрос получения списка регионов указанной страны с информацией о стране.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n */\n @tuiPure\n public getRegionsWithCountry$(countryId: number): Observable<ScIRegionWithCountry[]> {\n return this.referencesService.getReference$<ScIRegionWithCountry[]>(ScReferenceName.regionWithCountry, { countryId: countryId });\n }\n\n /**\n * Создает запрос получения списка городов указанного региона.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n * @param regionId Идентификатор записи региона {@link regionId}.\n */\n @tuiPure\n public getCities$(countryId: number, regionId: number): Observable<ScICity[]> {\n return this.referencesService.getReference$<ScICity[]>(ScReferenceName.city, { countryId: countryId, regionId: regionId });\n }\n\n /**\n * Создает запрос получения списка городов указанного региона и страны с информацией о регионе.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n * @param regionId Идентификатор записи региона {@link regionId}.\n */\n @tuiPure\n public getCitiesWithRegion$(countryId: number, regionId: number): Observable<ScICityWithRegion[]> {\n return this.referencesService.getReference$<ScICityWithRegion[]>(ScReferenceName.cityWithRegion, { countryId: countryId, regionId: regionId });\n }\n\n /**\n * Создает запрос получения списка городов указанного региона и страны с информацией о регионе и стране.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n * @param regionId Идентификатор записи региона {@link regionId}.\n */\n @tuiPure\n public getCityesWithRegionAndCountry$(countryId: number, regionId: number): Observable<ScICityWithRegionAndCountry[]> {\n return this.referencesService.getReference$<ScICityWithRegionAndCountry[]>(ScReferenceName.cityWithRegionAndCountry, { countryId: countryId, regionId: regionId });\n }\n\n /**\n * Создает запрос получения списка городов указанного региона и страны по поисковому запросу.\n *\n * @param term Поисковый запрос.\n * @param countryId Идентификатор записи страны.\n * @param regionId Идентификатор записи региона.\n */\n @tuiPure\n public getCitiesByTerm$(term: string, countryId?: number, regionId?: number): Observable<ScICityWithRegion[]> {\n return this.referencesService.getReferenceByTerm$<ScICityWithRegion[]>(ScReferenceName.cityWithRegion, term, { countryId: countryId, regionId: regionId });\n }\n\n /**\n * Создает запрос получения информации о городе с информацией о регионе и стране.\n *\n * @param cityId Идентификатор записи города.\n */\n @tuiPure\n public getCityById$(cityId: number): Observable<ScICityWithRegionAndCountry> {\n return this.referencesService.getReferenceById$<ScICityWithRegionAndCountry>(ScReferenceName.cityWithRegionAndCountry, cityId);\n }\n}\n","import { ScSeoResource } from '../../catalog/dto/sc-seo-resource';\nimport { ScINewsDTO } from '../internal/sc-i-news-dto';\n\n/**\n * Модель данных новости.\n */\nexport class ScNews extends ScSeoResource {\n /**\n * Идентификатор новости.\n */\n public id: number;\n\n /**\n * Заголовок новости.\n */\n public subject: string;\n\n /**\n * Дата и время создания новости.\n */\n public createdAt: string;\n\n /**\n * Строка HTML с содержимым новости.\n */\n public text: string;\n\n /**\n * Ссылка на основное изображение новости в формате WebP.\n */\n public imageWebp?: string;\n\n /**\n * Инициализирует экземпляр класса {@link ScCategory}.\n *\n * @param newsDTO Данные для инициализации.\n */\n public constructor(newsDTO: ScINewsDTO) {\n super(newsDTO);\n\n this.id = newsDTO.id;\n this.subject = newsDTO.subject;\n this.image = newsDTO.image;\n this.imageWebp = newsDTO.imageWebp;\n this.createdAt = newsDTO.createdAt;\n this.text = newsDTO.text;\n }\n}\n","/*\n * Публичное API библиотеки бизнес-логики.\n */\n\nexport * from './sc-news';\nexport * from './sc-news-tile';\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен, указывающий число записей новостей отображаемых в \"Последние новости\".\n */\nexport const SC_COUNT_LAST_NEWS: InjectionToken<number> = new InjectionToken<number>('countLasNews', {\n providedIn: 'root',\n factory: () => 4,\n});\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, Observable, shareReplay, switchMap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { ScIPaginate, ScIPaginationParams } from '../../pagination';\nimport { SC_URLS } from '../../tokens';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScNews, ScNewsTile } from '../classes';\nimport { ScINewsDTO } from '../internal/sc-i-news-dto';\nimport { SC_COUNT_LAST_NEWS } from '../tokens/sc-count-last-news';\n\n/**\n * Сервис для получения списка новостей.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScNewsService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Количество последних новостей.\n */\n private readonly countLasNews: number = inject(SC_COUNT_LAST_NEWS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * {@link Observable} получения списка последних новостей.\n */\n private readonly lastNewsList$: Observable<ScIPaginate<ScNewsTile>> = this.user$.pipe(\n switchMap(() => this.http.get<ScIPaginate<ScNewsTile>>(`${this.urls.apiUrl}/news`, { params: { perPage: this.countLasNews } })),\n shareReplay(1) // Подогреваем Observable во избежание повторения запросов получения списка последних новостей.\n );\n\n /**\n * Возвращает {@link Observable} списка новостей с пагинацией.\n *\n * @param params параметры пагинации новостей.\n */\n public getListOfNews$(params: ScIPaginationParams): Observable<ScIPaginate<ScNewsTile>> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n return this.http.get<ScIPaginate<ScNewsTile>>(`${this.urls.apiUrl}/news`, { params: { ...params } });\n }\n\n /**\n * Возвращает {@link Observable} полной информации о новости.\n *\n * @param newsId Идентификатор новости.\n */\n public getNews$(newsId: number): Observable<ScNews> {\n return this.http.get<ScINewsDTO>(`${this.urls.apiUrl}/news/${newsId}`).pipe(map((category) => new ScNews(category)));\n }\n\n /**\n * Возвращает {@link Observable} получения списка последних новостей.\n */\n public getLastNewsList$(): Observable<ScIPaginate<ScNewsTile>> {\n return this.lastNewsList$;\n }\n}\n","/*\n * Публичное API библиотеки бизнес-логики.\n */\n\nexport * from './classes';\nexport * from './services/sc-news.service';\nexport * from './internal/sc-i-news-dto';\nexport * from './tokens/sc-count-last-news';\n","/**\n * Перечисление типов действий для уведомлений.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScNotificationActionTypes {\n /**\n * Переход на страницу рекламации.\n */\n reclamationPage = 'reclamation_page',\n\n /**\n * Переход на страницу заказа.\n */\n orderPage = 'order_page',\n\n /**\n * Переход на страницу новости.\n */\n newsPage = 'news_page',\n\n /**\n * Переход на страницу товара.\n */\n productPage = 'product_page',\n\n /**\n * Переход на страницу онлайн оплаты.\n */\n onlinePayment = 'online_payment',\n}\n","/**\n * Перечисление символьных обозначений уровней уведомлений.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScNotificationLevelNames {\n /**\n * Информационное уведомление.\n */\n info = 'info',\n\n /**\n * Уведомление об успешно выполненном действии.\n */\n success = 'success',\n\n /**\n * Уведомление об ошибке.\n */\n error = 'error',\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { interval, Observable, of, ReplaySubject, switchMap, tap } from 'rxjs';\n\nimport { ScIUpdateInterval, ScIUrls } from '../../config';\nimport { SC_UPDATE_INTERVAL, SC_URLS } from '../../tokens';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScINotificationsCount, ScIUserNotification } from '..';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScNotificationsService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Интервалы обновления данных.\n */\n private readonly updateInterval: ScIUpdateInterval = inject(SC_UPDATE_INTERVAL);\n\n /**\n * {@link ReplaySubject} данных о количестве уведомлений пользователя.\n */\n private readonly notificationsCount$: ReplaySubject<ScINotificationsCount | undefined> = new ReplaySubject<ScINotificationsCount | undefined>(1);\n\n /**\n * {@link ReplaySubject} данных об уведомлениях пользователя.\n */\n private readonly notifications$: ReplaySubject<ScIUserNotification[]> = new ReplaySubject<ScIUserNotification[]>(1);\n\n /**\n * Интервал, через который выполняется запрос уведомлений пользователя.\n */\n private readonly interval$: Observable<number> = interval(this.updateInterval.notificationsUpdate).pipe(\n tap(() => {\n this.updateUserNotificationsCount();\n })\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScNotificationsService}.\n *\n */\n public constructor() {\n this.user$\n .pipe(\n tap((user) => {\n // eslint-disable-next-line sonarjs/no-selector-parameter\n if (user.isGuest) {\n // eslint-disable-next-line unicorn/no-useless-undefined\n this.notificationsCount$.next(undefined);\n } else {\n this.updateUserNotificationsCount();\n }\n }),\n switchMap((user) => (user.isGuest ? of() : this.interval$))\n )\n .subscribe();\n }\n\n /**\n * Обновляет количество уведомлений.\n */\n public updateUserNotificationsCount(): void {\n this.getUserNotificationsCount$()\n .pipe(\n tap((count) => {\n this.setNotificationsCountChange(count);\n })\n )\n .subscribe();\n }\n\n /**\n * Обновляет список уведомлений.\n */\n public updateUserNotifications(): void {\n this.getUserNotifications$()\n .pipe(\n tap((notificationsList) => {\n this.setNotificationsChange(notificationsList);\n })\n )\n .subscribe();\n }\n\n /**\n * Обновляет количество и список уведомлений.\n */\n public updateNotificationsListAndCount$(): Observable<ScIUserNotification[]> {\n return this.getUserNotificationsCount$().pipe(\n tap((count) => {\n this.setNotificationsCountChange(count);\n }),\n switchMap(() => this.getUserNotifications$()),\n tap((notificationsList) => {\n this.setNotificationsChange(notificationsList);\n })\n );\n }\n\n /**\n * Создает запрос получения списка уведомлений.\n */\n public getUserNotifications$(): Observable<ScIUserNotification[]> {\n return this.http.get<ScIUserNotification[]>(`${this.urls.apiUrl}/user/notifications`);\n }\n\n /**\n * Создает запрос получения количества уведомлений.\n */\n public getUserNotificationsCount$(): Observable<ScINotificationsCount> {\n return this.http.get<ScINotificationsCount>(`${this.urls.apiUrl}/user/notifications/count`);\n }\n\n /**\n * Создает запрос на удаление всех уведомлений.\n */\n public deleteAllNotifications$(): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/user/notifications`);\n }\n\n /**\n * Создает запрос на прочтение всех уведомлений.\n */\n public readAllNotifications$(): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/user/notifications`, {});\n }\n\n /**\n * Создает запрос на удаление уведомления по идентификатору.\n *\n * @param notificationId Идентификатор уведомления, которое необходимо удалить.\n */\n public deleteNotificationById$(notificationId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/user/notifications/${notificationId}`);\n }\n\n /**\n * Создает запрос на прочтение уведомления по идентификатору.\n *\n * @param notificationId Идентификатор уведомления, которое необходимо пометить прочитанным.\n */\n public readNotificationById$(notificationId: number): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/user/notifications/${notificationId}`, {});\n }\n\n /**\n * Возвращает {@link Observable} количества уведомлений пользователя.\n */\n public getNotificationsCountChange$(): Observable<ScINotificationsCount | undefined> {\n return this.notificationsCount$.asObservable();\n }\n\n /**\n * Возвращает {@link Observable} списка уведомлений пользователя.\n */\n public getNotificationsChange$(): Observable<ScIUserNotification[]> {\n return this.notifications$.asObservable();\n }\n\n /**\n * Устанавливает {@link Observable} количества уведомлений пользователя.\n *\n * @param notificationsCount Данные о количестве уведомлений.\n */\n private setNotificationsCountChange(notificationsCount: ScINotificationsCount | undefined): void {\n this.notificationsCount$.next(notificationsCount);\n }\n\n /**\n * Устанавливает {@link Observable} списка уведомлений пользователя.\n *\n * @param notifications Данные о списке уведомлений.\n */\n private setNotificationsChange(notifications: ScIUserNotification[]): void {\n this.notifications$.next(notifications);\n }\n}\n","import { ScIDeliveryCostDTO } from '../internal';\n\n/**\n * Модель данных о бесплатной доставке.\n */\nexport class ScDeliveryCost {\n /**\n * Данные о бесплатной доставке.\n */\n public freeShippingTerms?: {\n /**\n * Минимальная сумма бесплатной доставки.\n */\n minOrdersSum: number;\n\n /**\n * Общая сумма всех текущих заказов и корзины.\n */\n currentOrdersSum: number;\n };\n\n /**\n * Сформированное сообщение с данными о доставке.\n */\n public message: string | null;\n\n /**\n * Сформированное сообщение об ошибке.\n */\n public errorMessage?: string;\n\n /**\n * Инициализирует экземпляр класса {@link ScDeliveryCost}.\n *\n * @param deliveryCost DTO данных о бесплатной доставке.\n * @param deliveryDate Дата доставки.\n */\n public constructor(deliveryCost: ScIDeliveryCostDTO, deliveryDate: string) {\n if (deliveryCost.freeShippingTerms?.minOrdersSum !== undefined && deliveryCost.freeShippingTerms.currentOrdersSum !== undefined) {\n this.freeShippingTerms = { minOrdersSum: deliveryCost.freeShippingTerms.minOrdersSum, currentOrdersSum: deliveryCost.freeShippingTerms.currentOrdersSum };\n this.message = `Для оформления бесплатной доставки сумма заказов на ${deliveryDate} должна быть более ${this.freeShippingTerms.minOrdersSum.toLocaleString()} руб.<br>\n Текущая сумма заказов составляет ${this.freeShippingTerms.currentOrdersSum.toLocaleString()} руб`;\n }\n }\n}\n","/**\n * Перечисление типов доставки заказа.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScDeliveryType {\n /**\n * Самовывоз.\n */\n self_delivery = 1,\n\n /**\n * Доставка.\n */\n delivery = 2,\n}\n","/**\n * Перечисление типов отплат заказа.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScPaymentType {\n /**\n * Оплата наличными.\n */\n nal = 1,\n\n /**\n * Онлайн оплата.\n */\n online = 2,\n\n /**\n * Безналичный расчёт (без НДС).\n */\n beznal = 3,\n\n /**\n * Безналичный расчёт (с НДС).\n */\n beznal2 = 4,\n\n /**\n * Банковская карта.\n */\n terminal = 5,\n\n /**\n * Оплата через систему быстрых платежей.\n */\n sbp = 6,\n}\n","import { ScCartItem } from '../../cart/dto/sc-cart-item';\nimport { ScContragent } from '../../contragent/dto/sc-contragent';\nimport { ScOrderStateStatus } from '../../references/enums/sc-order-state-status';\nimport { ScPaymentStatus } from '../../references/enums/sc-payment-status';\nimport { ScDeliveryType, ScPaymentType } from '../enums';\nimport { ScIOrderDTO } from '../internal/sc-i-order-dto';\nimport { ScIOrderDelivery } from './sc-order-delivery';\nimport { ScIOrderHistory } from './sc-order-history';\nimport { ScIOrderPayment } from './sc-order-payment';\nimport { ScOrderShort } from './sc-order-short';\n\n/**\n * Полная информация о заказе.\n */\nexport class ScOrder {\n /**\n * Идентификатор записи заказа.\n */\n public id: number;\n\n /**\n * Дата и время создания заказа.\n */\n public createdAt: string;\n\n /**\n * Идентификатор статуса.\n */\n public status: ScOrderStateStatus;\n\n /**\n * Направление продаж.\n */\n public direction: number;\n\n /**\n * Данные об оплате заказа.\n */\n public payment: ScIOrderPayment;\n\n /**\n * Сумма заказа.\n */\n public sum: number;\n\n /**\n * Список продуктов заказа.\n */\n public products?: ScCartItem[];\n\n /**\n * Список записей истории изменения статусов заказа.\n */\n public history?: ScIOrderHistory[];\n\n /**\n * Список счетов заказа.\n */\n public invoices?: string[];\n\n /**\n * Комментарий клиента к заказу.\n */\n public comment?: string;\n\n /**\n * Изображение, прикрепленное к заказу клиентом во время создания.\n */\n public image?: string;\n\n /**\n * Данные о доставке заказа.\n */\n public delivery: ScIOrderDelivery;\n\n /**\n * Данные о контрагенте клиента.\n */\n public contragent?: ScContragent;\n\n /**\n * Закрепленный за заказом пользователь.\n */\n public attachedUser?: {\n /**\n * Тип пользователя.\n */\n type: string;\n\n /**\n * ФИО пользователя.\n */\n name: string;\n\n /**\n * Номер телефона. В формате \"79203436527\" или \"+79203436527\".\n */\n phone: string;\n\n /**\n * Адрес электронной почты.\n */\n email: string;\n };\n\n /**\n * Номер документа в учетной системе клиента.\n */\n public numberDoc?: number;\n\n /**\n * Штрих-код заказа.\n */\n public barcode?: number;\n\n /**\n * Дата последнего обновления статуса и информации об оплате.\n */\n public lastUpdateDate: Date;\n\n /**\n * Инициализирует экземпляр класса {@link ScOrder}.\n *\n * @param orderDTO DTO полная информация о заказе.\n */\n public constructor(orderDTO: ScIOrderDTO) {\n this.id = orderDTO.id;\n this.createdAt = orderDTO.createdAt;\n this.status = orderDTO.status;\n this.direction = orderDTO.direction;\n this.payment = orderDTO.payment;\n this.sum = orderDTO.sum;\n this.products = orderDTO.products?.map((productDTO) => new ScCartItem(productDTO));\n this.history = orderDTO.history;\n this.invoices = orderDTO.invoices;\n this.comment = orderDTO.comment;\n this.image = orderDTO.image;\n this.delivery = orderDTO.delivery;\n this.contragent = orderDTO.contragent;\n this.attachedUser = orderDTO.attachedUser;\n this.numberDoc = orderDTO.numberDoc;\n this.barcode = orderDTO.barcode;\n this.lastUpdateDate = new Date();\n }\n\n /**\n * Тип оплаты.\n */\n public get paymentType(): ScPaymentType {\n return this.payment.type;\n }\n\n /**\n * Тип доставки.\n */\n public get deliveryType(): ScDeliveryType {\n return this.delivery.type;\n }\n\n /**\n * Признак, что заказ можно оплатить online.\n */\n public get isPayable(): boolean {\n return (\n [ScOrderStateStatus.new, ScOrderStateStatus.worked_out, ScOrderStateStatus.pending].includes(this.status) &&\n this.payment.type === ScPaymentType.online &&\n this.payment.status !== undefined &&\n [ScPaymentStatus.none, ScPaymentStatus.sent_payment_link, ScPaymentStatus.goto_payment_page, ScPaymentStatus.error_by_user].includes(this.payment.status) &&\n this.payment.onlinePaymentLink !== undefined\n );\n }\n\n /**\n * Признак черновика заказа.\n */\n public get isDraft(): boolean {\n return this.status === ScOrderStateStatus.draft;\n }\n\n /**\n * Признак, что заказ будет подлежать online-оплате.\n */\n public get isPayableSoon(): boolean {\n return (\n ![ScOrderStateStatus.draft, ScOrderStateStatus.declined, ScOrderStateStatus.deleted, ScOrderStateStatus.completed].includes(this.status) &&\n !this.isPayable &&\n this.payment.type === ScPaymentType.online\n );\n }\n\n /**\n * Признак, что заказ завершён.\n */\n public get isCompleted(): boolean {\n return [ScOrderStateStatus.completed, ScOrderStateStatus.declined, ScOrderStateStatus.deleted].includes(this.status);\n }\n\n /**\n * Признак нового заказа.\n */\n public get isNew(): boolean {\n return this.status === ScOrderStateStatus.new;\n }\n\n /**\n * Возвращает сумму заказа в виде строки. Если стоимость отсутствует, то вернёт '-'.\n */\n public getSumStr(): string {\n return this.sum > 0 ? `${this.sum.toLocaleString()} ₽` : '-';\n }\n\n /**\n * Возвращает сообщение о необходимости уточнить сумму заказа или пустую строку.\n */\n public getSumMessage(): string {\n return this.sum === 0 ? 'Цена требует уточнения' : '';\n }\n\n /**\n * Возвращает признак того, что срок жизни информации о заказе не истёк.\n *\n * @param orderLifeTime Срок жизни данных в ms.\n */\n public cachedDataIsActual(orderLifeTime: number): boolean {\n return this.lastUpdateDate.getTime() >= Date.now() - orderLifeTime;\n }\n\n /**\n * Обновляет данные полного заказа.\n *\n * @param order Полная информация о заказе.\n */\n public updateData(order: ScOrder): void {\n this.status = order.status;\n this.direction = order.direction;\n this.payment = order.payment;\n this.sum = order.sum;\n this.products = order.products;\n this.history = order.history;\n this.invoices = order.invoices;\n this.comment = order.comment;\n this.image = order.image;\n this.delivery = order.delivery;\n this.contragent = order.contragent;\n this.attachedUser = order.attachedUser;\n this.lastUpdateDate = new Date();\n }\n\n /**\n * Обновляет данные полного заказа данными краткой информации о заказе. Не обновляете дату последнего обновления.\n *\n * @param order Краткая информация о заказе.\n */\n public updateDataFromShortOrder(order: ScOrderShort): void {\n this.status = order.status;\n this.direction = order.direction;\n this.payment = order.payment;\n this.sum = order.sum;\n this.delivery.type = order.deliveryType;\n }\n}\n","import { ScOrderStateStatus } from '../../references';\nimport { ScDeliveryType } from '../enums';\nimport { ScIOrderShortDTO } from '../internal/sc-i-order-short-dto';\nimport { ScIOrderPayment } from './sc-order-payment';\n\n/**\n * Краткая информация о заказе.\n */\nexport class ScOrderShort {\n /**\n * Идентификатор записи заказа.\n */\n public id: number;\n\n /**\n * Дата и время создания заказа.\n */\n public createdAt: string;\n\n /**\n * Идентификатор статуса.\n */\n public status: ScOrderStateStatus;\n\n /**\n * Направление продаж.\n */\n public direction: number;\n\n /**\n * Данные об оплате заказа.\n */\n public payment: ScIOrderPayment;\n\n /**\n * Тип доставки.\n */\n public deliveryType: ScDeliveryType;\n\n /**\n * Сумма заказа.\n */\n public sum: number;\n\n /**\n * Номер документа в учетной системе клиента.\n */\n public numberDoc?: number;\n\n /**\n * Штрих-код заказа.\n */\n public barcode?: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScIOrderShortDTO}.\n *\n * @param orderDTO DTO Краткая информация о заказе.\n */\n public constructor(orderDTO: ScIOrderShortDTO) {\n this.id = orderDTO.id;\n this.createdAt = orderDTO.createdAt;\n this.status = orderDTO.status;\n this.direction = orderDTO.direction;\n this.payment = orderDTO.payment;\n this.deliveryType = orderDTO.deliveryType;\n this.sum = orderDTO.sum;\n this.numberDoc = orderDTO.numberDoc;\n this.barcode = orderDTO.barcode;\n }\n\n /**\n * Возвращает сумму заказа в виде строки. Если стоимость отсутствует, то вернёт '-'.\n */\n public getSumStr(): string {\n return this.sum > 0 ? `${this.sum.toLocaleString()} ₽` : '-';\n }\n\n /**\n * Возвращает сообщение о необходимости уточнить сумму заказа или пустую строку.\n */\n public getSumMessage(): string {\n return this.sum === 0 ? 'Цена требует уточнения' : '';\n }\n\n /**\n * Обновляет данные заказа.\n *\n * @param order Краткая информация о заказе.\n */\n public updateData(order: ScOrderShort): void {\n this.status = order.status;\n this.direction = order.direction;\n this.payment = order.payment;\n this.sum = order.sum;\n this.deliveryType = order.deliveryType;\n }\n}\n","/* eslint-disable no-param-reassign */\n\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { format, parse } from 'date-fns';\nimport { filter, map, Observable, of, switchMap, tap } from 'rxjs';\n\nimport { ScCart, ScCartService } from '../../cart';\nimport { ScIDateFormat, ScIUpdateInterval, ScIUrls } from '../../config';\nimport { ScIPaginate } from '../../pagination';\nimport { SC_DATE_FORMAT, SC_UPDATE_INTERVAL, SC_URLS } from '../../tokens';\nimport { ScUIService } from '../../ui';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { ScDeliveryCost, ScINewOrder, ScINewOrderFromDraft, ScOrder, ScOrderShort } from '../dto';\nimport { ScIDeliveryCostDTO, ScIOrderDTO, ScIOrderShortDTO } from '../internal';\n\n/**\n * Сервис для работы с заказами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScOrdersService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Интервалы обновления данных.\n */\n private readonly updateInterval: ScIUpdateInterval = inject(SC_UPDATE_INTERVAL);\n\n /**\n * Сервис для работы с корзиной.\n */\n private readonly cartService: ScCartService = inject(ScCartService);\n\n /**\n * Сервис для работы с UI.\n */\n private readonly uiService: ScUIService = inject(ScUIService);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Коллекция пар ключ-значение для заказов пользователя.\n */\n private readonly idOrderMap: Map<number, ScOrder> = new Map<number, ScOrder>();\n\n /**\n * Формат дат.\n */\n private readonly dateFormats: ScIDateFormat = inject(SC_DATE_FORMAT);\n\n /**\n * Инициализирует экземпляр класса {@link ScOrdersService}.\n */\n public constructor() {\n this.user$.pipe(filter((user) => user.isGuest)).subscribe(() => {\n this.idOrderMap.clear();\n });\n }\n\n /**\n * Создаёт запрос нового заказа по указанному направлению продаж.\n *\n * @param directionId Идентификатор направления продаж.\n * @param newOrder Данные нового заказа.\n */\n public createOrder$(directionId: number, newOrder: ScINewOrder): Observable<ScOrderShort[]> {\n return this.http.post<ScIOrderShortDTO[]>(`${this.urls.apiUrl}/orders/${directionId}`, newOrder).pipe(\n map((orders) => orders.map((item) => new ScOrderShort(item))),\n tap((orders: ScOrderShort[]) => {\n orders.forEach((order) => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderCreated,\n params: { order_id: order.id },\n });\n });\n }),\n tap(() => {\n this.uiService.removeNewOrderMetadata(directionId);\n })\n );\n }\n\n /**\n * Возвращает список доступных дат доставки для указанного адреса.\n *\n * @param addressId Идентификатор адреса доставки контрагента клиента.\n */\n public getDeliveriesData$(addressId: number): Observable<string[]> {\n return this.http.get<string[]>(`${this.urls.apiUrl}/orders/delivery/${addressId}/nearest-dates`);\n }\n\n /**\n * Возвращает список доступных дат самовывоза для указанного склада.\n *\n * @param warehouseId Идентификатор склада.\n */\n public getSelfDeliveriesData$(warehouseId: number): Observable<string[]> {\n return this.http.get<string[]>(`${this.urls.apiUrl}/orders/self-delivery/${warehouseId}/nearest-dates`);\n }\n\n /**\n * Возвращает список заказов с пагинацией.\n *\n * @param params Параметры запроса получения заказов.\n */\n public getOrders$(params: HttpParams): Observable<ScIPaginate<ScOrderShort>> {\n return this.http.get<ScIPaginate<ScIOrderShortDTO>>(`${this.urls.apiUrl}/orders`, { params: params }).pipe(\n map((ordersPaginateDTO) => {\n ordersPaginateDTO.data = ordersPaginateDTO.data.map((item) => new ScOrderShort(item));\n\n return ordersPaginateDTO as ScIPaginate<ScOrderShort>;\n }),\n tap((ordersPaginate) => {\n this.idOrderMap.forEach((order) => {\n if (order.cachedDataIsActual(this.updateInterval.orderData)) {\n const findOrder = ordersPaginate.data.find((item) => item.id === order.id);\n\n if (findOrder) {\n order.updateDataFromShortOrder(findOrder);\n }\n }\n });\n })\n );\n }\n\n /**\n * Возвращает полную информацию о заказе.\n *\n * @param orderId Идентификатор заказа.\n * @param cacheable Признак возможности получения заказа из кэшированных данных.\n */\n public getOrder$(orderId: number, cacheable: boolean = true): Observable<ScOrder> {\n const orderMap = this.idOrderMap.get(orderId);\n\n if (cacheable && orderMap?.cachedDataIsActual(this.updateInterval.orderData)) {\n return of(orderMap);\n }\n\n return this.http.get<ScIOrderDTO>(`${this.urls.apiUrl}/orders/${orderId}`).pipe(\n map((orderDTO) => new ScOrder(orderDTO)),\n switchMap((order) =>\n this.cartService.getCartChange$().pipe(\n map((cart) => {\n order.products?.map((product) => {\n product.product.cartItem = cart.items.find((item) => item.product.id === product.product.id);\n\n return product;\n });\n\n return order;\n })\n )\n ),\n tap((order) => this.idOrderMap.set(order.id, order))\n );\n }\n\n /**\n * Копирует товары заказа в корзину текущего пользователя.\n *\n * @param orderId Идентификатор заказа.\n */\n public clone$(orderId: number): Observable<ScCart> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/orders/${orderId}/clone`, {}).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderCloned,\n params: { order_id: orderId },\n });\n }),\n switchMap(() => this.cartService.updateCart$())\n );\n }\n\n /**\n * Отменяет заказ.\n *\n * @param orderId Идентификатор заказа.\n */\n public cancel$(orderId: number): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/orders/${orderId}/cancel`, {}).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderCancelled,\n params: { order_id: orderId },\n });\n })\n );\n }\n\n /**\n * Создаёт запрос нового заказа из заказа черновика.\n *\n * @param orderId Идентификатор заказа черновика.\n * @param newOrder Данные нового заказа.\n */\n public createOrderByDraft$(orderId: number, newOrder: ScINewOrderFromDraft): Observable<ScOrderShort[]> {\n return this.http.post<ScIOrderShortDTO[]>(`${this.urls.apiUrl}/orders/${orderId}/draft`, newOrder).pipe(\n map((orders) => orders.map((item) => new ScOrderShort(item))),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderCreatedFromDraft,\n params: { order_id: orderId },\n });\n }),\n tap(() => this.idOrderMap.delete(orderId))\n );\n }\n\n /**\n * Создаёт запрос на удаление заказа черновика.\n *\n * @param orderId Идентификатор заказа черновика.\n */\n public deleteDraftOrder$(orderId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/orders/${orderId}/draft`).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderDeleted,\n params: { order_id: orderId, is_draft: true },\n });\n }),\n tap(() => this.idOrderMap.delete(orderId))\n );\n }\n\n /**\n * Возвращает информацию о стоимости доставки.\n *\n * @param addressId Идентификатор адреса доставки контрагента клиента.\n * @param warehouseId Идентификатор склада.\n * @param date Дата доставки.\n */\n public getDeliveryCost$(addressId: number, warehouseId: number, date: string): Observable<ScDeliveryCost> {\n return this.http\n .get<ScIDeliveryCostDTO>(`${this.urls.apiUrl}/orders/delivery/${addressId}/cost`, {\n params: {\n warehouse_id: warehouseId,\n date: date,\n },\n })\n .pipe(\n map((ordersPaginateDTO) => {\n const formattedDate = format(parse(date, this.dateFormats.api, new Date()), this.dateFormats.uiDate);\n\n return new ScDeliveryCost(ordersPaginateDTO, formattedDate);\n })\n );\n }\n}\n","import { EventEmitter, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { BehaviorSubject, concatMap, debounceTime, filter, map, Observable, scan, share, startWith, switchMap, takeWhile } from 'rxjs';\n\nimport { ScCatalogService, ScProduct } from '../../catalog';\nimport { SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS } from '../../providers/sc-product-pagination-options';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScIPaginate, ScIPaginationParams } from '../dto';\n\n/**\n * Сервис пагинации.\n */\n@Injectable()\nexport class ScPaginationService<P extends ScIPaginationParams, O extends object = Omit<P, keyof ScIPaginationParams>> {\n /**\n * {@link BehaviorSubject} изменения данных о странице пагинации.\n */\n private readonly page$: BehaviorSubject<ScIPaginationParams> = new BehaviorSubject<ScIPaginationParams>(SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS);\n\n /**\n * {@link BehaviorSubject} изменения оставшихся данных пагинации без данных о странице пагинации.\n */\n private readonly others$: BehaviorSubject<O | undefined> = new BehaviorSubject<O | undefined>(undefined);\n\n /**\n * {@link EventEmitter} события нажатия на кнопку (следующие товары).\n */\n public readonly nextPageClickEvent: EventEmitter<void> = inject(SC_NEXT_PAGE_PAGINATION_CLICK);\n\n /**\n * {@link Observable} изменения статуса аутентификации.\n */\n public authStatus$ = inject(SC_USER_INFO).pipe(map((user) => user.isGuest));\n\n /**\n * Сервис работы с каталогом.\n */\n public catalogService = inject(ScCatalogService);\n\n /**\n * Объект данных пагинации.\n */\n public data$: Observable<ScIPaginate<ScProduct> | null> = this.others$.pipe(\n filter(tuiIsPresent),\n switchMap((params) =>\n this.page$.pipe(\n filter(tuiIsPresent),\n // Избегаем множественных сигналов при одновременном изменении фильтров page$ и others$.\n debounceTime(0),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n map((page) => ({ ...params, ...page })),\n // TODO: Заменить this.catalogService.getProducts$ на абстрактный метод сервиса по примеру `TuiTreeLoader`.\n switchMap((paginationParams) => this.authStatus$.pipe(switchMap(() => this.catalogService.getProducts$(paginationParams).pipe(startWith(null)))))\n )\n ),\n share()\n );\n\n /**\n * Объект данных пагинации с сохранением предыдущих значений для \"разворачивания\" списка товаров.\n * Список сохраняется при переходе по страницам, до тех пор пока не будет получен сигнал `others$`.\n */\n public dataAccumulated$: Observable<ScIPaginate<ScProduct> | null> = this.others$.pipe(\n filter(tuiIsPresent),\n switchMap((params) => this.authStatus$.pipe(map(() => params))),\n switchMap((params) =>\n this.page$.pipe(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment\n map((page) => ({ ...params, ...page })),\n // TODO: Заменить this.catalogService.getProducts$ на абстрактный метод сервиса по примеру `TuiTreeLoader`.\n concatMap((paginationParams) => this.catalogService.getProducts$(paginationParams).pipe(startWith(null))),\n // TODO: Заменить `ScProduct` на T тип.\n scan<ScIPaginate<ScProduct> | null, [ScIPaginate<ScProduct> | null, ScIPaginate<ScProduct> | null]>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ([_, accumulator], value) => {\n if (!value) {\n return [value, accumulator];\n }\n\n if (accumulator && value.meta.currentPage > 1) {\n value.data.unshift(...accumulator.data);\n }\n\n return [value, value];\n },\n [null, null]\n ),\n map(([paginate]) => paginate),\n takeWhile((paginate) => paginate === null || paginate.meta.currentPage < paginate.meta.lastPage, true)\n )\n ),\n share()\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScPaginationService}.\n */\n public constructor() {\n this.others$\n .pipe(\n filter(tuiIsPresent),\n switchMap(() =>\n this.nextPageClickEvent.pipe(\n scan((accumulator) => accumulator + 1, 1),\n startWith(1)\n )\n ),\n takeUntilDestroyed()\n )\n .subscribe((page) => {\n this.patchPage({ page: page });\n });\n }\n\n /**\n * Полностью обновляет значения страницы пагинации {@link page$}.\n *\n * @param newPageValue Новые данные страницы пагинации.\n */\n public setPage(newPageValue: ScIPaginationParams): void {\n this.page$.next(newPageValue);\n }\n\n /**\n * Частично обновляет значения страницы пагинации {@link page$}.\n *\n * @param partialPageValue Новые данные страницы пагинации. Можно передать часть данных.\n */\n public patchPage(partialPageValue: Partial<ScIPaginationParams>): void {\n // Значения по умолчанию.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const currentPage = this.page$.value;\n\n // Обновляем только те поля, которые переданы в partialPageValue.\n const updatedPage: ScIPaginationParams = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment\n page: partialPageValue.page ?? currentPage.page,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment\n perPage: partialPageValue.perPage ?? currentPage.perPage,\n };\n\n this.page$.next(updatedPage);\n }\n\n /**\n * Полностью обновляет остальные параметры пагинации {@link others$}.\n *\n * @param newOthersValue Новые параметры пагинации.\n */\n public setOthers(newOthersValue: O): void {\n this.others$.next(newOthersValue);\n }\n\n /**\n * Частично обновляет остальные параметры пагинации {@link others$}.\n *\n * @param partialOthersValue Новые параметры пагинации. Можно передать часть данных.\n */\n public patchOthers(partialOthersValue: Partial<O>): void {\n const currentOthers = this.others$.value ?? ({} as O);\n\n // Избегаем обновления, если partialOthersValue пустой.\n if (Object.keys(partialOthersValue).length > 0) {\n const updatedOthers: O = { ...currentOthers, ...partialOthersValue };\n this.others$.next(updatedOthers);\n }\n }\n\n /**\n * Обновляет все данные пагинации {@link page$} и {@link others$}.\n *\n * @param newValue Новые параметры пагинации для {@link page$} и {@link others$}.\n */\n public setPaginationParams(newValue: P): void {\n // Обновляем значение page$.\n this.page$.next({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n page: newValue.page,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n perPage: newValue.perPage,\n });\n\n // Обновляем значение others$.\n const othersValue = this.extractOthers(newValue);\n this.others$.next(othersValue);\n }\n\n /**\n * Выделяет параметры пагинации, не относящиеся к странице пагинации {@link O} из полного объекта параметров пагинации {@link P}.\n *\n * @param value Объекты параметров пагинации {@link P}\n */\n // eslint-disable-next-line class-methods-use-this\n private extractOthers(value: P): O {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page, perPage, ...others } = value;\n\n return others as O;\n }\n}\n","/**\n * Перечисление идентификаторов статусов опросника.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScQuestionnaireStatusEnum {\n /**\n * Идентификатор статуса \"Опрос начат\".\n */\n started = 1,\n\n /**\n * Идентификатор статуса \"Напомнить позже\".\n */\n remindLater = 2,\n\n /**\n * Идентификатор статуса \"Отказ от опроса\".\n */\n refuse = 3,\n\n /**\n * Идентификатор статуса \"Опрос завершен\".\n */\n finished = 4,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, of, switchMap, tap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { SC_USER_INFO, ScUser } from '../../user';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { ScIQuestionAnswer, ScIQuestionnaire, ScIQuestionnaireQuestion, ScQuestionnaireStatusEnum } from '..';\n\n/**\n * Сервис для работы с опросниками.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScQuestionnaireService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Выполняет запрос получения списка опросников.\n */\n public getQuestionnaires$(): Observable<ScIQuestionnaire[]> {\n return this.user$.pipe(switchMap((user) => (user.isGuest ? of([]) : this.http.get<ScIQuestionnaire[]>(`${this.urls.apiUrl}/questionnaires`))));\n }\n\n /**\n * Выполняет запрос получения списка вопросов опросника.\n *\n * @param questionnaire Опросник для которого необходимо получить список вопросов.\n */\n public getQuestions$(questionnaire: ScIQuestionnaire): Observable<ScIQuestionnaireQuestion[]> {\n return (\n this.http\n .get<ScIQuestionnaireQuestion[]>(`${this.urls.apiUrl}/questionnaires/${questionnaire.id}/questions`)\n // eslint-disable-next-line no-param-reassign,no-return-assign\n .pipe(tap((questions) => (questionnaire.questions = questions)))\n );\n }\n\n /**\n * Выполняет запрос отправки ответа на вопрос опросника.\n *\n * @param questionnaireId Идентификатор опросника.\n * @param questionId Идентификатор вопроса опросника.\n * @param answers Список ответов на вопрос опросника.\n */\n public sendAnswers$(questionnaireId: number, questionId: number, answers: ScIQuestionAnswer[]): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/questionnaires/${questionnaireId}/questions/${questionId}/answers`, answers).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.questionnaireAnswered,\n params: { questionnaire_id: questionnaireId },\n });\n })\n );\n }\n\n /**\n * Выполняет запрос установки статуса опросника.\n *\n * @param questionnaire Опросник для которого необходимо получить список вопросов.\n * @param status Идентификатор статуса опросника.\n */\n public setStatus$(questionnaire: ScIQuestionnaire, status: ScQuestionnaireStatusEnum): Observable<void> {\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n return this.http.get<void>(`${this.urls.apiUrl}/questionnaires/${questionnaire.id}/statuses/${status}`);\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { ScIPaginate } from '../../pagination';\nimport { SC_URLS } from '../../tokens';\nimport { ScIReclamation, ScIReclamationOnDataCreate, ScIReclamationOnDataCreateItem, ScIReclamationShort } from '../dto';\n\n/**\n * Сервис для работы с рекламациями.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScReclamationService {\n /**\n * Инициализирует экземпляр класса {@link ScReclamationService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls\n ) {}\n\n /**\n * Создаёт запрос новую рекламацию.\n *\n * @param newReclamation Данные новой рекламации.\n */\n public createReclamation$(newReclamation: ScIReclamationOnDataCreate): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/reclamations`, newReclamation);\n }\n\n /**\n * Возвращает список рекламаций с пагинацией.\n *\n * @param params Параметры запроса получения рекламаций.\n */\n public getReclamations$(params: HttpParams): Observable<ScIPaginate<ScIReclamationShort>> {\n return this.http.get<ScIPaginate<ScIReclamationShort>>(`${this.urls.apiUrl}/reclamations`, { params: params });\n }\n\n /**\n * Возвращает полную информацию о рекламации.\n *\n * @param reclamationId Идентификатор рекламации.\n */\n public getReclamation$(reclamationId: number): Observable<ScIReclamation> {\n return this.http.get<ScIReclamation>(`${this.urls.apiUrl}/reclamations/${reclamationId}`);\n }\n\n /**\n * Возвращает файл рекламации в формате Blob.\n *\n * @param reclamationId Идентификатор рекламации.\n */\n public downloadReclamation$(reclamationId: number): Observable<Blob> {\n return this.http\n .get(`${this.urls.apiUrl}/reclamations/${reclamationId}/download`, { responseType: 'blob' })\n .pipe(map((reclamation) => new Blob([reclamation], { type: 'application/pdf' })));\n }\n\n /**\n * Отправляет новое сообщение рекламации.\n *\n * @param reclamationId Идентификатор рекламации.\n * @param newMessage Новое сообщение рекламации.\n */\n public sendMessages$(reclamationId: number, newMessage: ScIReclamationOnDataCreateItem): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/reclamations/${reclamationId}/messages`, newMessage);\n }\n\n /**\n * Выполняет запрос удаления рекламации.\n *\n * @param reclamationId Идентификатор рекламации.\n */\n public deleteReclamation$(reclamationId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/reclamations/${reclamationId}`);\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Thing, WithContext } from 'schema-dts';\n\n/**\n * Компонент структурированных данных.\n */\n@Component({\n selector: 'sc-json-ld',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScJsonLdComponent<T extends Thing> {\n /**\n * HTML разметка, в которую внедряется объект структурированных данных.\n */\n @HostBinding('innerHTML')\n public jsonLD?: SafeHtml;\n\n /**\n * Инициализирует экземпляр класса {@link ScJsonLdComponent}.\n *\n * @param sanitizer Объект DomSanitizer для безопасной обработки HTML и стилей.\n */\n public constructor(private readonly sanitizer: DomSanitizer) {}\n\n /**\n * Объект структурированных данных о товаре.\n */\n @Input()\n public set json(currentValue: WithContext<T>) {\n this.jsonLD = this.getSafeHTML(currentValue);\n }\n\n /**\n * Возвращает безопасный html код.\n *\n * @param json JSON данные.\n */\n private getSafeHTML(json?: WithContext<T>): SafeHtml {\n // eslint-disable-next-line sonarjs/no-angular-bypass-sanitization\n return this.sanitizer.bypassSecurityTrustHtml(\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n `<script type=\"application/ld+json\">${json ? JSON.stringify(json, null, 2).replaceAll('</script>', String.raw`<\\/script>`) : ''}</script>`\n );\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { ScJsonLdComponent } from './sc-json-ld.component';\n\n/**\n * Модуль структурированных данных.\n */\n@NgModule({\n declarations: [ScJsonLdComponent],\n exports: [ScJsonLdComponent],\n})\nexport class ScJsonLdModule {}\n","/**\n * Перечисление типов подсказок запросов.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScISuggestionType {\n /**\n * Подсказки по фио.\n */\n fio = 'fio',\n\n /**\n * Подсказки по адресам.\n */\n address = 'address',\n\n /**\n * Подсказки по организациям.\n */\n organization = 'organization',\n\n /**\n * Подсказки по банкам.\n */\n bank = 'bank',\n\n /**\n * Подсказки по email.\n */\n email = 'email',\n}\n","/* eslint-disable security/detect-object-injection */\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { ScISuggestionType } from '../enums/sc-i-suggestion-type';\n\n/**\n * Сервис работы с API подсказок.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScSuggestionService {\n /**\n * Инициализирует экземпляр класса {@link ScSuggestionService}.\n *\n * @param http Сервис для выполнения HTTP-запросов.\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls\n ) {}\n\n /**\n * Возвращает {@link Observable} подсказок по указанному запросу.\n *\n * @param query Запрос, для которого нужно получить подсказки.\n * @param type Тип подсказок.\n */\n public getData<T>(query: string, type: ScISuggestionType = ScISuggestionType.address): Observable<T[]> {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return this.http.get<T[]>(`${this.urls.apiUrl}/suggestions/${[type]}`, { params: { query: query } });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { EventEmitter, inject, Injectable } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\n\nimport { ScISeo } from '../catalog/dto/sc-i-seo';\nimport { ScIDefaultPageMeta } from '../config/sc-i-default-page-meta';\nimport { ScIUrls } from '../config/sc-i-urls';\nimport { SC_COMPANY_NAME } from '../tokens/sc-company-name';\nimport { SC_DEFAULT_PAGE_META } from '../tokens/sc-default-page-meta';\nimport { SC_URLS } from '../tokens/sc-urls';\nimport { RobotsTagType } from './types/robots-tag-type';\n\n/**\n * Сервис управления SEO-параметрами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScSeoService {\n /**\n * Событие установки meta-тегов страницы.\n */\n public readonly isSetMetaTagsEventEmitter: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Данные о мета-данных страницы по умолчанию.\n */\n private readonly defaultSeo: ScIDefaultPageMeta = inject(SC_DEFAULT_PAGE_META);\n\n /**\n * Сервис маршрутизации.\n */\n private readonly router: Router = inject(Router);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис установки метаданных страницы.\n */\n private readonly metaService: Meta = inject(Meta);\n\n /**\n * Сервис управления заголовком страницы.\n */\n private readonly titleService: Title = inject(Title);\n\n /**\n * Селектор группы для устанавливаемых метатегов.\n */\n private readonly dataGroupSelector: string = 'seo-tags';\n\n /**\n * Объект {@link Document}, предоставляющий доступ к DOM страницы.\n */\n private readonly document: Document = inject(DOCUMENT);\n\n /**\n * Название компании.\n */\n private readonly companyName: string = inject(SC_COMPANY_NAME);\n\n /**\n * Инициализирует экземпляр класса {@link ScSeoService}.\n */\n public constructor() {\n this.setShareType('website');\n }\n\n /**\n * Устанавливает meta-теги.\n *\n * @param title Заголовок страницы.\n * @param description Описание страницы.\n * @param keywords Ключевые слова страницы.\n * @param emitEventAfterSet Признак того, необходимо ли генерировать событие, после установки тегов. По умолчанию {@link true}.\n * @param robots Список robots тегов для страницы.\n */\n public setPageMetaTags(\n title: string = this.defaultSeo.title,\n description: string = this.defaultSeo.description,\n keywords: string = this.defaultSeo.keywords,\n emitEventAfterSet: boolean = true,\n robots: RobotsTagType[] = ['index', 'follow']\n ): void {\n this.setPageTitle(title);\n this.setPageMetaDescription(description);\n this.setPageMetaKeywords(keywords);\n\n this.setPageMetaRobots(robots);\n\n if (emitEventAfterSet) {\n this.isSetMetaTagsEventEmitter.emit();\n }\n }\n\n /**\n * Устанавливает Open Graph meta-теги.\n *\n * @param ogTitle Open Graph заголовок.\n * @param ogDescription Open Graph описание.\n * @param ogImg Open Graph изображение.\n * @param emitEventAfterSet Признак того, необходимо ли генерировать событие, после установки тегов. По умолчанию {@link true}.\n */\n public setPageOpenGraphMetaTags(\n ogTitle: string = this.defaultSeo.title,\n ogDescription: string = this.defaultSeo.description,\n ogImg: string = this.urls.logoUrl,\n emitEventAfterSet: boolean = true\n ): void {\n this.setOpenGraphMetaTags(ogTitle, ogDescription, `${this.urls.siteUrl}${this.router.url}`, ogImg);\n\n if (emitEventAfterSet) {\n this.isSetMetaTagsEventEmitter.emit();\n }\n }\n\n /**\n * Устанавливает все meta-теги из пришедшего источника. Если какого-то тега нет, будет установлено значение по умолчанию.\n *\n * @param resource Источник meta - тегов.\n * @param img Изображение. Если не пришло, то будет установлено значение по умолчанию.\n * @param robots Список robots тегов для страницы.\n */\n public setMetaTagsFromResource(resource?: ScISeo, img: string = this.urls.logoUrl, robots: RobotsTagType[] = ['index', 'follow']): void {\n this.setAllPageMetaTags(resource?.title, resource?.description, resource?.keywords, img, resource?.meta, robots);\n }\n\n /**\n * Устанавливает все meta-теги страницы со значением по умолчанию, внедряя туда заголовок, если он передан.\n *\n * @param title Заголовок страницы.\n * @param robots Список robots тегов для страницы.\n */\n public setDefaultAllPageMetaTags(title: string = this.defaultSeo.title, robots: RobotsTagType[] = ['index', 'follow']): void {\n this.setAllPageMetaTags(`${title} - ${this.companyName}`, `${title}, ${this.defaultSeo.description}`, undefined, undefined, [], robots);\n }\n\n /**\n * Устанавливает все meta-теги страницы со значением по умолчанию, внедряя туда заголовок, если он передан. Устанавливает значение \"не индексировать\" для поисковых роботов.\n *\n * @param title Заголовок страницы.\n */\n public setNoIndexDefaultAllPageMetaTags(title: string = this.defaultSeo.title): void {\n this.setAllPageMetaTags(`${title} - ${this.companyName}`, `${title}, ${this.defaultSeo.description}`, undefined, undefined, [], ['noindex', 'nofollow', 'noarchive']);\n }\n\n /**\n * Устанавливает все meta-теги страницы. Если какой-либо из параметров не указан, для него устанавливается значение по умолчанию.\n *\n * @param title Заголовок страницы.\n * @param description Описание страницы.\n * @param keywords Ключевые слова страницы.\n * @param img Изображение.\n * @param meta Массив дополнительных значений метатегов.\n * @param robots Список robots тегов для страницы.\n */\n public setAllPageMetaTags(\n title: string = this.defaultSeo.title,\n description: string = this.defaultSeo.description,\n keywords: string = this.defaultSeo.keywords,\n img: string = this.urls.logoUrl,\n meta: ScISeo['meta'] = [],\n robots: RobotsTagType[] = ['index', 'follow']\n ): void {\n this.removeMetaTags();\n this.setPageTitle(title);\n this.setPageMetaDescription(description);\n this.setPageMetaKeywords(keywords);\n this.setOpenGraphMetaTags(title, description, `${this.urls.siteUrl}${this.router.url}`, img);\n meta.forEach((tag) => {\n this.setPageMetaByName(tag.name, tag.content);\n });\n this.setPageMetaRobots(robots);\n\n this.isSetMetaTagsEventEmitter.emit();\n }\n\n /**\n * Устанавливает meta-тег robots для страницы.\n *\n * @param robots Список robots тегов для страницы.\n */\n public setPageMetaRobots(robots: RobotsTagType[]): void {\n this.setPageMetaByName('robots', robots.join(', '));\n }\n\n /**\n * Удаляет все установленные meta-теги.\n */\n public removeMetaTags(): void {\n const tags = this.document.querySelectorAll<HTMLMetaElement>(`meta[data-group=\"${this.dataGroupSelector}\"]`);\n\n tags.forEach((tag) => {\n this.metaService.removeTagElement(tag);\n });\n }\n\n /**\n * Возвращает сгенерированный SEO-resource с указанными параметрами.\n *\n * @param seo Данные SEO ресурса.\n * @param defaultTitle Заголовок страницы используемый в случае отсутствия заголовка в SEO-ресурсе.\n * @param defaultDescription Описание страницы используемое в случае отсутствия описания в SEO-ресурсе.\n * @param defaultKeyWords Ключевые слова страницы используемые в случае отсутствия ключевых слов в SEO-ресурсе.\n */\n public getGenerateSeoResource(\n seo: ScISeo | undefined,\n defaultTitle: string,\n defaultDescription: string = this.defaultSeo.description,\n defaultKeyWords: string = this.defaultSeo.keywords\n ): ScISeo {\n return {\n title: seo?.title ?? defaultTitle,\n description: seo?.description ?? defaultDescription,\n keywords: seo?.keywords ?? defaultKeyWords,\n meta: seo?.meta,\n };\n }\n\n /**\n * Устанавливает title-заголовок страницы.\n *\n * @param title Заголовок страницы.\n * @param appendDefaultTitle Флаг необходимости добавить заголовок по умолчанию в конец заголовка страницы.\n */\n private setPageTitle(title: string, appendDefaultTitle: boolean = false): void {\n this.titleService.setTitle(title + (appendDefaultTitle ? ` - ${this.defaultSeo.title}` : ''));\n }\n\n /**\n * Устанавливает meta-описание страницы.\n *\n * @param description Meta-описание страницы.\n */\n private setPageMetaDescription(description: string): void {\n this.setPageMetaByName('description', description);\n }\n\n /**\n * Устанавливает meta-ключевые слова страницы.\n *\n * @param keywords Meta-ключевые слова страницы.\n */\n private setPageMetaKeywords(keywords: string): void {\n this.setPageMetaByName('keywords', keywords);\n }\n\n /**\n * Устанавливает Open Graph meta-теги страницы для социальных сетей.\n *\n * @param title Заголовок страницы.\n * @param description Описание страницы.\n * @param url Ссылка на страницу.\n * @param img Изображение.\n */\n private setOpenGraphMetaTags(title: string, description: string, url: string, img: string): void {\n this.setOpenGraphMetaByProperty('og:title', title);\n this.setOpenGraphMetaByProperty('og:url', url);\n this.setOpenGraphMetaByProperty('og:image', img);\n this.setOpenGraphMetaByProperty('og:description', description);\n this.setOpenGraphMetaByProperty('og:type', 'website');\n }\n\n /**\n * Устанавливает meta-тег страницы с указанным именем.\n * Будет создан или обновлён заголовок вида `<meta name=\"{name}\" content=\"{content}\" />`\n *\n * @param name Название заголовка.\n * @param content Содержимое заголовка.\n */\n private setPageMetaByName(name: string, content: string): void {\n this.metaService.updateTag({ name: name, content: content, 'data-group': this.dataGroupSelector });\n }\n\n /**\n * Устанавливает Open Graph meta-тег по свойству атрибута property.\n *\n * @param property Свойство атрибута.\n * @param content Содержимое тега.\n */\n private setOpenGraphMetaByProperty(property: string, content: string): void {\n this.metaService.updateTag({ property: property, content: content, 'data-group': this.dataGroupSelector });\n }\n\n /**\n * Устанавливает Open Graph мета-тег типа объекта.\n *\n * @param type Тип объекта.\n */\n private setShareType(type: string): void {\n this.setOpenGraphMetaByProperty('og:type', type);\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Сервис, содержащий вспомогательные методы для работы с телефонными номерами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScPhoneService {\n /**\n * Возвращает признак, что указанная строка является номером телефона.\n *\n * @param value Значение, которое необходимо проверить.\n * @returns Признак того, что строка является номером телефона.\n */\n public static isValidPhoneNumber(value: string): boolean {\n // eslint-disable-next-line security/detect-unsafe-regex, sonarjs/regex-complexity\n return /^\\+?\\s{0,3}\\d{0,2}[\\s-]{0,3}(\\(?\\s{0,3}\\d{1,4}\\s{0,3}\\)?)?([\\s-]{0,3}\\d{1,4}){1,5}$/g.test(value);\n }\n\n /**\n * Возвращает очищенное от лишних символов представление номера телефона.\n *\n * @param value Значение, которое необходимо очистить.\n * @returns Очищенное представление номера телефона.\n */\n public static cleanPhoneNumber(value: string): string {\n return value.replaceAll(/[\\s()+-]/g, '').replaceAll(/^8/g, '7');\n }\n\n /**\n * Проверяет, что номер телефона подходит для использования в мессенджерах.\n *\n * @param value Номер телефона, который необходимо проверить.\n * @returns Признак того, что номер телефона подходит для мессенджеров.\n */\n public static isValidPhoneNumberForMessenger(value: string): boolean {\n if (!this.isValidPhoneNumber(value)) {\n return false;\n }\n const cleanedValue = this.cleanPhoneNumber(value);\n\n return /^7[98]\\d{9}$/.test(cleanedValue);\n }\n\n /**\n * Возвращает удобочитаемое представление номера телефона.\n *\n * @param value Значение, которое необходимо преобразовать.\n * @returns Удобочитаемое представление номера телефона.\n */\n public static formatPhoneNumber(value: string): string {\n if (/^\\+?79\\d/g.test(value)) {\n return value.replaceAll(/^\\+?(\\d)(\\d{3})(\\d{3})(\\d{2})(\\d*)$/g, '+$1($2)$3-$4-$5');\n }\n\n if (/^\\+?7\\d/g.test(value)) {\n return value.replaceAll(/^\\+?(\\d)(\\d{4})(\\d{2})(\\d{2})(\\d*)$/g, '+$1($2)$3-$4-$5');\n }\n\n return value;\n }\n}\n","import { ScIEmployment, ScIExperience, ScISalary } from '../interfaces';\nimport { ScIVacancy } from '../internal/dto';\n\n/**\n * Модель данных о вакансии.\n */\nexport class ScVacancy {\n /**\n * ID вакансии.\n */\n public id: string;\n\n /**\n * Название вакансии.\n */\n public name: string;\n\n /**\n * URL-адрес вакансии.\n */\n public url: string;\n\n /**\n * Данные о заработной плате.\n */\n public salary: ScISalary | null;\n\n /**\n * Требуемый опыт.\n */\n public experience: ScIExperience | null;\n\n /**\n * Вид занятости.\n */\n public employment: ScIEmployment | null;\n\n /**\n * Инициализирует экземпляр класса {@link ScVacancy}\n *\n * @param vacancy Данные о вакансии.\n */\n public constructor(vacancy: ScIVacancy) {\n this.id = vacancy.id;\n this.name = vacancy.name;\n this.url = vacancy.alternate_url;\n this.salary = vacancy.salary;\n this.experience = vacancy.experience ?? null;\n this.employment = vacancy.employment ?? null;\n }\n}\n","import { ScIVacanciesList, ScIVacancy } from '../internal/dto';\nimport { ScVacancy } from './sc-vacancy';\n\n/**\n * Модель данных списка вакансий.\n */\nexport class ScVacanciesList {\n /**\n * Общее количество найденных вакансий.\n */\n public found: number;\n\n /**\n * Количество вакансий на странице.\n */\n public perPage: number;\n\n /**\n * Номер страницы.\n */\n public page: number;\n\n /**\n * Список вакансий на странице.\n */\n public items: ScVacancy[];\n\n /**\n * Инициализирует экземпляр класса {@link ScVacanciesList}\n *\n * @param vacancies информация о списке вакансий.\n */\n public constructor(vacancies: ScIVacanciesList) {\n this.found = vacancies.found;\n this.perPage = vacancies.per_page;\n this.page = vacancies.page;\n this.items = vacancies.items.map((v: ScIVacancy) => new ScVacancy(v));\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIVacanciesDataSource } from '../interfaces';\n\n/**\n * Токен внедрения источника информации о вакансиях.\n */\nexport const SC_VACANCIES_DATA_SOURCE: InjectionToken<ScIVacanciesDataSource> = new InjectionToken<ScIVacanciesDataSource>('IVacanciesDataSource');\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { ScICacheLifetime } from '../../config';\nimport { SC_CACHE_SETTINGS, SC_IS_HEADER_REQUIRED, ScCacheSettings } from '../../httpInterceptors';\nimport { SC_CACHE_LIFETIME } from '../../tokens';\nimport { ScVacanciesList } from '../classes';\nimport { ScIVacanciesDataSource } from '../interfaces';\nimport { ScIVacanciesList } from '../internal/dto';\nimport { SC_VACANCIES_DATA_SOURCE } from '../tokens';\n\n/**\n * Сервис для работы со списком вакансий.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScVacanciesService {\n /**\n * Инициализирует экземпляр класса {@link ScVacanciesService}.\n *\n * @param http Сервис для выполнения HTTP-запросов.\n * @param vacanciesData Объект с информацией об источнике вакансий.\n * @param cacheLifeTime Объект с информацией о времени жизни данных.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_VACANCIES_DATA_SOURCE) private readonly vacanciesData: ScIVacanciesDataSource,\n @Inject(SC_CACHE_LIFETIME) private readonly cacheLifeTime: ScICacheLifetime\n ) {}\n\n /**\n * Возвращает {@link Observable} информации о вакансиях компании.\n *\n * @param perPage Количество вакансий на странице.\n * @param page Запрашиваемая страница списка вакансий.\n */\n // TODO: Переделать отправку параметров в запросе на HttpParams (использовать IPaginationParams)\n public getVacancies(perPage: number = 10, page: number = 0): Observable<ScVacanciesList> {\n return this.http\n .get<ScIVacanciesList>(`${this.vacanciesData.apiUrl}?employer_id=${this.vacanciesData.employerId}&per_page=${perPage}&page=${page}`, {\n context: new HttpContext().set(SC_IS_HEADER_REQUIRED, false).set(SC_CACHE_SETTINGS, new ScCacheSettings(true, this.cacheLifeTime.vacanciesData)),\n })\n .pipe(map((result: ScIVacanciesList) => new ScVacanciesList(result)));\n }\n}\n","/* eslint-disable quotes,sonarjs/no-nested-template-literals */\n\nimport { formatDate } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { WA_WINDOW } from '@ng-web-apis/common';\n\nimport { ScIUrls } from '../config';\nimport { SC_URLS } from '../tokens';\n\n/**\n * Сервис для работы с vCard.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScVCardService {\n /**\n * Инициализирует экземпляр класса {@link ScVCardService}.\n *\n * @param urls Список ссылок приложения.\n * @param windowReference Объект {@link Window}, предоставляющий доступ к окну приложения.\n */\n public constructor(\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n @Inject(WA_WINDOW) private readonly windowReference: Window & typeof globalThis\n ) {}\n\n /**\n * Формирует строку VCard контакта персоны.\n *\n * @param name Имя контакта.\n * @param phone Телефон контакта.\n * @param email Адрес электронной почты контакта.\n * @param type Описание типа контакта.\n * @param org Организация контакта.\n * @param photoUri Ссылка на фото контакта.\n */\n public createIndividualVCardStr(name: string, phone: string, email: string, type: string = '', org: string = 'ООО Снабцентр', photoUri: string = this.urls.logoUrl): string {\n const currentDate: string = formatDate(new Date(), 'yyyy-MM-dd', 'en');\n\n return (\n `BEGIN:VCARD` +\n `\\nVERSION:3.0` +\n `\\nKIND:individual` +\n `\\nPHOTO;VALUE=uri:${photoUri}` +\n `\\nN:${name}` +\n `\\nFN:${name}` +\n `\\nEMAIL:${email}` +\n `\\nTEL;TYPE=work:${phone}` +\n `\\nORG:${org}${type ? `\\nTITLE:${type}` : ''}\\nLOGO;VALUE=uri:${this.urls.logoUrl}` +\n // TODO: Переделать ссылку на страницу пользователя\n `\\nURL:${this.windowReference.location.protocol}//${this.windowReference.location.host}` +\n `\\nREV:${currentDate}` +\n `\\nEND:VCARD`\n );\n }\n\n /**\n * Формирует строку VCard контакта организации.\n *\n * @param name Имя контакта.\n * @param phone Телефон контакта.\n * @param email Адрес электронной почты контакта.\n * @param type Описание типа контакта.\n * @param org Организация контакта.\n */\n public createOrgVCardStr(name: string, phone: string, email: string, type: string = '', org: string = 'ООО Снабцентр'): string {\n const currentDate: string = formatDate(new Date(), 'yyyy-MM-dd', 'en');\n\n return (\n `BEGIN:VCARD` +\n `\\nVERSION:3.0` +\n `\\nKIND:org` +\n `\\nPHOTO;VALUE=uri:${this.urls.logoUrl}` +\n `\\nFN:${name}` +\n `\\nEMAIL:${email}` +\n `\\nTEL;TYPE=work:${phone}` +\n `\\nORG:${org}${type ? `\\nTITLE:${type}` : ''}\\nLOGO;VALUE=uri:${this.urls.logoUrl}` +\n `\\nURL:${this.windowReference.location.protocol}//${this.windowReference.location.host}` +\n // TODO: Добавить ADR.\n `\\nREV:${currentDate}` +\n `\\nEND:VCARD`\n );\n }\n\n /**\n * Возвращает vCard файла контакта в формате {@link Blob}.\n *\n * @param data Строка данных, на основе которой создаётся файл vCard.\n */\n // eslint-disable-next-line class-methods-use-this\n public getVCardBlob(data: string): Blob {\n return new Blob([data], { type: 'text/x-vcard' });\n }\n\n /**\n * Выполняет скачивание генерируемого vCard файла контакта.\n *\n * @param data Строка данных, на основе которой создаётся файл vCard.\n */\n public downloadVCard(data: string): void {\n this.windowReference.open(this.windowReference.URL.createObjectURL(this.getVCardBlob(data)));\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { ScIPhoneOnDataApprove } from '../../user';\nimport { IPhoneCheck } from '../interfaces/sc-i-phone-check';\n\n/**\n * Сервис для отправки кодов подтверждения (номера телефона, адреса эл. почты и т.д.).\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScVerificationService {\n /**\n * Инициализирует экземпляр класса {@link ScVerificationService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(\n private http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls\n ) {}\n\n /**\n * Возвращает {@link Observable} запроса на отправку кода подтверждения указанного номера телефона.\n *\n * @param phone Данные номера телефона.\n * @returns Ответ запроса с отсутствующим телом в формате {@link Observable}.\n */\n public sendPhoneApproveCode(phone: string): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/user/verification/phone`, { phone: phone });\n }\n\n /**\n * Возвращает {@link Observable} запроса на отправку сообщения электронной почты для подтверждения адреса электронной почты.\n *\n * @param email Электронная почта.\n * @returns Ответ запроса с отсутствующим телом в формате {@link Observable}.\n */\n public sendEmailApproveCode(email: string): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/user/verification/email`, { email: email });\n }\n\n /**\n * Возвращает {@link Observable} запроса на подтверждение телефона пользователя.\n *\n * @param data Данные необходимые для подтверждения телефона.\n * @returns Ответ запроса с отсутствующим телом в формате {@link Observable}.\n */\n public approvePhone(data: ScIPhoneOnDataApprove): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/user/verification/phone`, data);\n }\n\n /**\n * Возвращает {@link Observable} объект проверки телефона.\n *\n * @param phone Номер телефона.\n */\n public getPhoneCheck$(phone: string): Observable<IPhoneCheck> {\n return this.http.get<IPhoneCheck>(`${this.urls.apiUrl}/user/verification/phone/check`, {\n params: { phone: phone },\n });\n }\n}\n","/*\n * Публичное API библиотеки бизнес-логики.\n */\n\nexport * from './common';\nexport * from './auth';\nexport * from './banners';\nexport * from './cart';\nexport * from './catalog';\nexport * from './config';\nexport * from './configurator';\nexport * from './contacts';\nexport * from './contragent';\nexport * from './converters';\nexport * from './delivery-address';\nexport * from './frequently-asked-questions';\nexport * from './files';\nexport * from './guards';\nexport * from './helpers';\nexport * from './httpInterceptors';\nexport * from './locations';\nexport * from './news';\nexport * from './notifications';\nexport * from './utm';\nexport * from './order';\nexport * from './pagination';\nexport * from './providers';\nexport * from './pipes';\nexport * from './questionnaire';\nexport * from './reclamation';\nexport * from './references';\nexport * from './sc-json-ld';\nexport * from './search';\nexport * from './suggestion';\nexport * from './services';\nexport * from './tokens';\nexport * from './ui';\nexport * from './user';\nexport * from './user-metrika';\nexport * from './utils/phone-fotmatter';\nexport * from './vacancies';\nexport * from './vCard';\nexport * from './verification';\nexport * from './warehouse';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.ScTokenService","i3.ScUserMetrikaService","i1.ScUserService","i2.ScUIService","i3.ScConvertersService","i4.ScUserMetrikaService","i2.ScCatalogService","i2.ScUserMetrikaService","i2.ScAuthService","i1.ScTokenService","i1.ScAuthService"],"mappings":"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"}
1
+ {"version":3,"file":"snabcentr-client-core.mjs","sources":["../../../projects/core/common/classes/sc-image.ts","../../../projects/core/auth/tokens/sc-access-auth-token-storage-key.ts","../../../projects/core/auth/tokens/sc-guest-token-storage-key.ts","../../../projects/core/auth/tokens/sc-refresh-auth-token-storage-key.ts","../../../projects/core/providers/ssr.providers.ts","../../../projects/core/tokens/sc-api-keys.ts","../../../projects/core/auth/services/sc-token.service.ts","../../../projects/core/httpInterceptors/tokens/sc-auth-add-header-required.ts","../../../projects/core/httpInterceptors/tokens/sc-is-logout-request.ts","../../../projects/core/httpInterceptors/tokens/sc-is-refresh-token-required.ts","../../../projects/core/tokens/notification-options.ts","../../../projects/core/tokens/sc-cache-lifetime.ts","../../../projects/core/tokens/sc-company-name.ts","../../../projects/core/tokens/sc-configurator-components.ts","../../../projects/core/tokens/sc-configurator-settings.ts","../../../projects/core/tokens/sc-default-page-meta.ts","../../../projects/core/tokens/sc-is-hidden-error-alert.ts","../../../projects/core/tokens/sc-linear-values-token.ts","../../../projects/core/tokens/sc-path-image-not-found.ts","../../../projects/core/tokens/sc-release.ts","../../../projects/core/tokens/sc-update-interval.ts","../../../projects/core/tokens/sc-urls.ts","../../../projects/core/tokens/sc-feedback-api.ts","../../../projects/core/tokens/sc-date-format.ts","../../../projects/core/user-metrika/enums/sc-user-metrika-goals-enum.ts","../../../projects/core/user/enums/sc-user-type.ts","../../../projects/core/user-metrika/services/sc-user-metrika.service.ts","../../../projects/core/auth/services/sc-auth.service.ts","../../../projects/core/banners/dto/sc-banner.ts","../../../projects/core/user/enums/sc-client-type.ts","../../../projects/core/user/dto/sc-user.ts","../../../projects/core/user/services/sc-user.service.ts","../../../projects/core/user/tokens/sc-user-providers.ts","../../../projects/core/banners/services/sc-banner.service.ts","../../../projects/core/cart/constants/sc-empty-cart.ts","../../../projects/core/cart/classes/sc-sum.ts","../../../projects/core/catalog/dto/sc-seo-resource.ts","../../../projects/core/catalog/dto/sc-category.ts","../../../projects/core/catalog/dto/sc-product.ts","../../../projects/core/cart/dto/sc-cart-item.ts","../../../projects/core/cart/dto/sc-cart.ts","../../../projects/core/cart/dto/sc-i-sales-direction-cart.ts","../../../projects/core/converters/services/sc-converters.service.ts","../../../projects/core/catalog/enums/sc-catalog-format.ts","../../../projects/core/catalog/enums/sc-product-tile-type.ts","../../../projects/core/user/dto/sc-user-metadata.ts","../../../projects/core/references/enums/sc-reference-name.ts","../../../projects/core/references/services/sc-references.service.ts","../../../projects/core/ui/utils/filter-changed-by-key.ts","../../../projects/core/ui/services/sc-ui.service.ts","../../../projects/core/providers/terminal.providers.ts","../../../projects/core/warehouse/services/sc-warehouse.service.ts","../../../projects/core/cart/services/sc-cart.service.ts","../../../projects/core/catalog/enums/sc-mime-types.ts","../../../projects/core/catalog/classes/sc-cached-data.ts","../../../projects/core/catalog/classes/sc-cached-item.ts","../../../projects/core/catalog/dto/sc-virtual-category.ts","../../../projects/core/catalog/internal/sc-i-category-dto.ts","../../../projects/core/catalog/tokens/sc-count-first-discounted-products.ts","../../../projects/core/providers/sc-id-or-slug-in-route.ts","../../../projects/core/pipes/sc-id-or-slug.pipe.ts","../../../projects/core/catalog/services/sc-catalog.service.ts","../../../projects/core/catalog/services/sc-favorite.service.ts","../../../projects/core/catalog/services/sc-recommendation.service.ts","../../../projects/core/config/sc-route-keys.ts","../../../projects/core/configurator/services/sc-configurator.service.ts","../../../projects/core/contacts/enums/sc-feedback-forms.ts","../../../projects/core/contacts/enums/sc-social-type.ts","../../../projects/core/contacts/dto/sc-uploaded-file.ts","../../../projects/core/contacts/services/sc-contacts.service.ts","../../../projects/core/httpInterceptors/tokens/sc-is-header-required.ts","../../../projects/core/providers/sc-product-pagination-options.ts","../../../projects/core/search/services/sc-search.service.ts","../../../projects/core/providers/search-term.providers.ts","../../../projects/core/providers/virtual-category.providers.ts","../../../projects/core/providers/sc-company-info.ts","../../../projects/core/utm/services/sc-utm.service.ts","../../../projects/core/contacts/services/sc-feedback.service.ts","../../../projects/core/contacts/services/sc-requisites.service.ts","../../../projects/core/contragent/services/sc-contragent.service.ts","../../../projects/core/delivery-address/services/sc-delivery-address.service.ts","../../../projects/core/frequently-asked-questions/services/sc-frequently-asked-questions.service.ts","../../../projects/core/files/classes/sc-document-info-node.ts","../../../projects/core/files/enums/sc-document-info-types-enum.ts","../../../projects/core/files/enums/sc-icon-types-enum.ts","../../../projects/core/files/services/sc-files.service.ts","../../../projects/core/guards/sc-auth-as-client.guard.ts","../../../projects/core/guards/sc-id-or-slug.guard.ts","../../../projects/core/pipes/sc-media-image-transformer.pipe.ts","../../../projects/core/helpers/sc-image-helper.ts","../../../projects/core/helpers/sc-units-helper.ts","../../../projects/core/httpInterceptors/classes/sc-cache-settings.ts","../../../projects/core/httpInterceptors/tokens/sc-cache-settings.ts","../../../projects/core/httpInterceptors/tokens/sc-guest-endpoints.ts","../../../projects/core/httpInterceptors/tokens/sc-guest-parameter-name.ts","../../../projects/core/httpInterceptors/sc-auth.interceptor.ts","../../../projects/core/httpInterceptors/internal/classes/sc-cached-response.ts","../../../projects/core/httpInterceptors/sc-cache.interceptor.ts","../../../projects/core/httpInterceptors/sc-convert.interceptor.ts","../../../projects/core/httpInterceptors/sc-errors.interceptor.ts","../../../projects/core/httpInterceptors/sc-options.interceptor.ts","../../../projects/core/httpInterceptors/sc-guest.interceptor.ts","../../../projects/core/httpInterceptors/sc-date-format.interceptor.ts","../../../projects/core/references/enums/sc-opf-list.ts","../../../projects/core/references/enums/sc-order-state-status.ts","../../../projects/core/references/enums/sc-payment-status.ts","../../../projects/core/references/enums/sc-reclamation-status.ts","../../../projects/core/locations/services/sc-location.service.ts","../../../projects/core/news/classes/sc-news.ts","../../../projects/core/news/classes/index.ts","../../../projects/core/news/tokens/sc-count-last-news.ts","../../../projects/core/news/services/sc-news.service.ts","../../../projects/core/news/index.ts","../../../projects/core/notifications/enums/sc-notification-action-types.ts","../../../projects/core/notifications/enums/sc-notification-level-names.ts","../../../projects/core/notifications/services/sc-notifications.service.ts","../../../projects/core/order/dto/sc-delivery-cost.ts","../../../projects/core/order/enums/sc-delivery-type.ts","../../../projects/core/order/enums/sc-payment-type.ts","../../../projects/core/order/dto/sc-order.ts","../../../projects/core/order/dto/sc-order-short.ts","../../../projects/core/order/services/sc-orders.service.ts","../../../projects/core/pagination/services/sc-pagination.service.ts","../../../projects/core/questionnaire/enums/sc-questionnaire-status-enum.ts","../../../projects/core/questionnaire/services/sc-questionnaire.service.ts","../../../projects/core/reclamation/services/sc-reclamation.service.ts","../../../projects/core/sc-json-ld/sc-json-ld.component.ts","../../../projects/core/sc-json-ld/sc-json-ld.module.ts","../../../projects/core/suggestion/enums/sc-i-suggestion-type.ts","../../../projects/core/suggestion/services/sc-suggestion.service.ts","../../../projects/core/services/sc-seo.service.ts","../../../projects/core/utils/phone-fotmatter/sc-phone.service.ts","../../../projects/core/vacancies/classes/sc-vacancy.ts","../../../projects/core/vacancies/classes/sc-vacancies-list.ts","../../../projects/core/vacancies/tokens/sc-vacancies-datasource.ts","../../../projects/core/vacancies/services/sc-vacancies.service.ts","../../../projects/core/vCard/sc-v-card.service.ts","../../../projects/core/verification/services/sc-verification.service.ts","../../../projects/core/public-api.ts","../../../projects/core/snabcentr-client-core.ts"],"sourcesContent":["import { ScIImage } from '../interfaces/sc-i-image';\n\n/**\n * Базовый класс для изображений.\n */\nexport class ScImage implements ScIImage {\n /**\n * Изображение.\n */\n public image: string;\n\n /**\n * Альтернативный текст.\n */\n public alt: string;\n\n /**\n * Изображение в формате WebP.\n */\n public imageWebp?: string;\n\n /**\n * Инициализирует экземпляр класса {@link ScImage}.\n *\n * @param image Изображение.\n * @param alt Альтернативный текст.\n * @param imageWebp Изображение в формате WebP.\n */\n constructor(image: string, alt: string, imageWebp?: string) {\n this.image = image;\n this.imageWebp = imageWebp;\n this.alt = alt;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен, указывающий ключ токена доступа пользователя к API в {@link Storage}.\n */\nexport const SC_ACCESS_AUTH_TOKEN_STORAGE_KEY: InjectionToken<string> = new InjectionToken<string>('accessAuthTokenStorageKey', {\n providedIn: 'root',\n factory: () => 'AccessAuth-Token',\n});\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен, указывающий ключ токена доступа гостя к API в {@link Storage}.\n */\nexport const SC_GUEST_TOKEN_STORAGE_KEY: InjectionToken<string> = new InjectionToken<string>('guestTokenStorageKey', {\n providedIn: 'root',\n factory: () => 'Guest-Token',\n});\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен, указывающий ключ для обновления ключа доступа к API в {@link Storage}.\n */\nexport const SC_REFRESH_AUTH_TOKEN_STORAGE_KEY: InjectionToken<string> = new InjectionToken<string>('refreshAuthTokenStorageKey', {\n providedIn: 'root',\n factory: () => 'RefreshAuth-Token',\n});\n","import { isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport { inject, InjectionToken, PLATFORM_ID } from '@angular/core';\nimport { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { Response } from 'express';\n\n/**\n * Токен для получения признака, что скрипт выполняется в браузере.\n */\nexport const IS_BROWSER = tuiCreateTokenFromFactory(() => isPlatformBrowser(inject(PLATFORM_ID)));\n\n/**\n * Токен для получения признака, что скрипт выполняется на сервере.\n */\nexport const IS_SERVER = tuiCreateTokenFromFactory(() => isPlatformServer(inject(PLATFORM_ID)));\n\n/**\n * Токен для получения данных об ответе на запрос.\n */\nexport const RESPONSE = new InjectionToken<Response>('RESPONSE');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIApiKeys } from '../config';\n\n/**\n * Токен внедрения заголовков ключей доступа к API.\n */\nexport const SC_API_KEYS: InjectionToken<ScIApiKeys> = new InjectionToken<ScIApiKeys>('IApiKeys');\n","import { HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { WA_LOCAL_STORAGE } from '@ng-web-apis/common';\nimport { filterByKey, StorageService, toValue, WA_STORAGE_EVENT } from '@ng-web-apis/storage';\nimport { Observable, startWith } from 'rxjs';\n\nimport { ScIApiKeys } from '../../config';\nimport { IS_BROWSER } from '../../providers/ssr.providers';\nimport { SC_API_KEYS } from '../../tokens/sc-api-keys';\nimport { IAuthToken, IToken } from '../interfaces';\nimport { SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_GUEST_TOKEN_STORAGE_KEY, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY } from '../tokens';\n\n/**\n * Сервис для работы с ключами аутентификации.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScTokenService {\n /**\n * {@link Observable} ключа доступа гостя к API в {@link Storage}.\n */\n public readonly guestToken$: Observable<string | null> = this.event$.pipe(filterByKey(this.guestStorageKey), toValue(), startWith(this.getGuestToken()));\n\n /**\n * {@link Observable} ключа доступа пользователя к API в {@link Storage}.\n */\n public readonly accessAuthToken$: Observable<string | null> = this.event$.pipe(filterByKey(this.accessAuthStorageKey), toValue(), startWith(this.getAccessToken()));\n\n /**\n * Инициализирует экземпляр класса {@link ScTokenService}.\n *\n * @param event$ {@link Observable} Событие изменения в {@link Storage}.\n * @param apiKeys Заголовки ключей доступа к API.\n * @param storageService Сервис для работы с {@link Storage} и внедрению его через DI.\n * @param guestStorageKey Токен, указывающий ключ токена доступа гостя к API в {@link Storage}.\n * @param accessAuthStorageKey Ключ доступа пользователя к API в {@link Storage}.\n * @param refreshAuthStorageKey Ключ обновления ключа доступа к API в {@link Storage}.\n * @param isBrowser Признак, что скрипт выполняется в браузере.\n * @param storage Хранилище {@link Storage}.\n */\n public constructor(\n @Inject(WA_STORAGE_EVENT) private readonly event$: Observable<StorageEvent>,\n @Inject(SC_API_KEYS) private readonly apiKeys: ScIApiKeys,\n @Inject(StorageService) private readonly storageService: Storage,\n @Inject(SC_GUEST_TOKEN_STORAGE_KEY) private readonly guestStorageKey: string,\n @Inject(SC_ACCESS_AUTH_TOKEN_STORAGE_KEY) private readonly accessAuthStorageKey: string,\n @Inject(SC_REFRESH_AUTH_TOKEN_STORAGE_KEY) private readonly refreshAuthStorageKey: string,\n @Inject(IS_BROWSER) private readonly isBrowser: boolean,\n @Optional() @Inject(WA_LOCAL_STORAGE) private readonly storage?: Storage\n ) {}\n\n /**\n * Возвращает ключ доступа к API.\n */\n public getAccessToken(): string | null {\n return this.storage && this.isBrowser ? this.storageService.getItem(this.accessAuthStorageKey) : null;\n }\n\n /**\n * Возвращает одноразовый ключ для обновления ключа доступа.\n */\n public getRefreshToken(): string | null {\n return this.storage && this.isBrowser ? this.storageService.getItem(this.refreshAuthStorageKey) : null;\n }\n\n // TODO Сохранять весь объект при добавлении функционала связанного с временем жизни ключа.\n /**\n * Устанавливает ключ доступа пользователя к API или ресурсу.\n *\n * @param token Ключ доступа пользователя к API или ресурсу.\n */\n public setAuthToken(token: IAuthToken): void {\n if (this.storage && this.isBrowser) {\n this.storageService.setItem(this.refreshAuthStorageKey, token.refresh.token);\n this.storageService.setItem(this.accessAuthStorageKey, token.access.token);\n }\n }\n\n /**\n * Удаляет ключ доступа пользователя к API или ресурсу.\n */\n public removeAuthToken(): void {\n if (this.getAccessToken()) {\n this.storageService.removeItem(this.refreshAuthStorageKey);\n this.storageService.removeItem(this.accessAuthStorageKey);\n }\n }\n\n /**\n * Возвращает ключ доступа пользователя к API или ресурсу в роли Гостя.\n */\n public getGuestToken(): string | null {\n return this.storage && this.isBrowser ? this.storageService.getItem(this.guestStorageKey) : null;\n }\n\n // TODO Сохранять весь объект при добавлении функционала связанного с временем жизни ключа.\n /**\n * Устанавливает ключ доступа пользователя к API или ресурсу в роли Гостя.\n *\n * @param tokenObject Ключ доступа пользователя к API или ресурсу в роли Гостя.\n */\n public setGuestToken(tokenObject: IToken): void {\n if (this.storage && this.isBrowser) {\n this.storageService.setItem(this.guestStorageKey, tokenObject.token);\n }\n }\n\n /**\n * Удаляет ключ доступа пользователя к API или ресурсу в роли Гостя.\n */\n public removeGuestToken(): void {\n if (this.getGuestToken()) {\n this.storageService.removeItem(this.guestStorageKey);\n }\n }\n\n /**\n * Добавляет в запрос заголовок для аутентификации пользователя или Гостя.\n *\n * @param request Данные запроса.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public addAuthHeader(request: HttpRequest<any>): HttpRequest<any> {\n if (this.getAccessToken() !== null) {\n return request.clone({ headers: request.headers.delete(this.apiKeys.guestKeyName).set(this.apiKeys.keyName, this.getAccessToken() ?? '') });\n }\n\n if (this.getGuestToken() !== null) {\n return request.clone({ headers: request.headers.delete(this.apiKeys.keyName).set(this.apiKeys.guestKeyName, this.getGuestToken() ?? '') });\n }\n\n return request.clone();\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { HttpContextToken } from '@angular/common/http';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { SC_IS_HEADER_REQUIRED } from './sc-is-header-required';\n\n/**\n * Токен, указывающий на необходимость добавления заголовка аутентификации приложения в исходящие запросы.\n * Нужен для того, чтобы регулировать заголовки аутентификации отдельно от остальных заголовков.\n *\n * Если указать `false`, то заголовки аутентификации будут проигнорированы при отправке запросов, не зависимо от значения {@link SC_IS_HEADER_REQUIRED}.\n */\nexport const SC_AUTH_ADD_HEADER_REQUIRED: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => true);\n","import { HttpContextToken } from '@angular/common/http';\n\n/**\n * Токен, указывающий, что выполняется запрос выхода из системы.\n */\nexport const SC_IS_LOGOUT_REQUEST: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => false);\n","import { HttpContextToken } from '@angular/common/http';\n\n/**\n * Токен, указывающий, что выполняется запрос на обновление ключей доступа.\n */\nexport const SC_IS_REFRESH_REQUIRED: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => false);\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Параметры авторизации под клиентом.\n */\nexport interface ScAuthAsClientOptions {\n /**\n * Сегменты URL-адресов для построения пути редиректа.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n urlTree: any[];\n\n /**\n * Количество минут жизни токена, до его обновления.\n */\n expiredAtMinute: number;\n}\n\n/**\n * Параметры по-умолчанию авторизации под клиентом.\n */\nexport const SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS: ScAuthAsClientOptions = {\n urlTree: ['/catalog'],\n expiredAtMinute: 2,\n};\n\n/**\n * Параметры авторизации под клиентом.\n */\nexport const SC_AUTH_AS_CLIENT_OPTIONS = tuiCreateToken(SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS);\n","import { InjectionToken } from '@angular/core';\n\nimport { ScICacheLifetime } from '../config';\n\n/**\n * Токен внедрения времени жизни данных.\n */\nexport const SC_CACHE_LIFETIME: InjectionToken<ScICacheLifetime> = new InjectionToken<ScICacheLifetime>('ICacheLifetime');\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен внедрения названия компании.\n */\nexport const SC_COMPANY_NAME: InjectionToken<string> = new InjectionToken<string>('COMPANY_NAME');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIConfiguratorBase, ScTypeByKey } from '../configurator';\n\n/**\n * Токен внедрения компонентов конфигураторов по их названию.\n */\nexport const SC_CONFIGURATOR_COMPONENTS: InjectionToken<ScTypeByKey<ScIConfiguratorBase>> = new InjectionToken<ScTypeByKey<ScIConfiguratorBase>>('SC_CONFIGURATOR_COMPONENTS');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIConfiguratorSettingsBase } from '../configurator';\nimport { ScTypeByKey } from '../configurator/types/sc-type-by-key';\n\n/**\n * Токен внедрения моделей настроек конфигураторов по их названию.\n */\nexport const SC_CONFIGURATOR_SETTINGS: InjectionToken<ScTypeByKey<ScIConfiguratorSettingsBase>> = new InjectionToken<ScTypeByKey<ScIConfiguratorSettingsBase>>(\n 'SC_CONFIGURATOR_SETTINGS'\n);\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIDefaultPageMeta } from '../config';\n\n/**\n * Токен внедрения мета-данных страницы по умолчанию.\n */\nexport const SC_DEFAULT_PAGE_META = tuiCreateToken<ScIDefaultPageMeta>();\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\n\n/**\n * Токен контекста запроса, указывающий на необходимость скрыть уведомление об ошибке.\n */\nexport const SC_IS_HIDDEN_ERROR_ALERT: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => false);\n\n/**\n * Контекст запроса, указывающий на необходимость скрыть уведомление об ошибке.\n */\nexport const SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT: HttpContext = new HttpContext().set(SC_IS_HIDDEN_ERROR_ALERT, true);\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Единицы измерения линейной величины по умолчанию.\n */\nexport const SC_LINEAR_VALUES: string[] = ['пог.м.', 'м.', 'м2'];\n\n/**\n * Токен единиц измерения линейной величины по умолчанию.\n */\nexport const SC_LINEAR_VALUES_TOKEN = tuiCreateToken(SC_LINEAR_VALUES);\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен внедрения пути до изображения 'Товар не найден'.\n */\nexport const SC_PATH_IMAGE_NOT_FOUND: InjectionToken<string> = new InjectionToken<string>('PATH_IMAGE_NOT_FOUND');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIAppRelease } from '../config';\n\n/**\n * Токен внедрения информации о релизе.\n */\nexport const SC_RELEASE: InjectionToken<ScIAppRelease> = new InjectionToken<ScIAppRelease>('IRelease');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIUpdateInterval } from '../config';\n\n/**\n * Токен внедрения интервалов обновления данных.\n */\nexport const SC_UPDATE_INTERVAL: InjectionToken<ScIUpdateInterval> = new InjectionToken<ScIUpdateInterval>('UPDATE_INTERVAL');\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIUrls } from '../config';\n\n/**\n * Токен внедрения списка ссылок приложения.\n */\nexport const SC_URLS: InjectionToken<ScIUrls> = new InjectionToken<ScIUrls>('IUrls');\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIFeedbackAPI } from '../config/sc-i-feedback-api';\n\n/**\n * Токен внедрения данных API обратной связи.\n */\nexport const SC_FEEDBACK_API: InjectionToken<ScIFeedbackAPI> = tuiCreateToken<ScIFeedbackAPI>();\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIDateFormat } from '../config/sc-i-date-format';\n\n/**\n * Токен внедрения формата дат.\n */\nexport const SC_DATE_FORMAT: InjectionToken<ScIDateFormat> = tuiCreateToken<ScIDateFormat>();\n","/**\n * Перечисление названий целей метрики используемых для отслеживания действий пользователей.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScUserMetrikaGoalsEnum {\n /**\n * Выполнен клик по баннеру.\n *\n * В качестве параметра должен быть указан идентификатор баннера (параметр \"banner_id\").\n */\n bannerClick = 'BANNER_CLICK',\n\n /**\n * Корзина очищена.\n */\n cartCleared = 'CART_CLEARED',\n\n /**\n * Пользователь добавил товар в корзину.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n cartItemAdded = 'CART_ITEM_ADDED',\n\n /**\n * Пользователь удалил товар из корзины.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n cartItemDeleted = 'CART_ITEM_DELETED',\n\n /**\n * Открыто диалоговое окно/страница добавления товара в корзину.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n cartItemAddShow = 'CART_ITEM_ADD_SHOW',\n\n /**\n * Пользователь добавил товар в корзину из рекомендаций.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n cartItemAddedFromRecommendations = 'CART_ITEM_ADDED_FROM_RECOMMENDATION',\n\n /**\n * Открыто диалоговое окно/страница со списком товаров в корзине.\n */\n cartShow = 'CART_SHOW',\n\n /**\n * Выполнено скачивание прайс-листа.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор категории для которой скачивается прайс-лист (параметр \"category_id\");\n * - тип скачиваемого прайс-листа (параметр \"price_type\").\n */\n catalogPriceDownload = 'CATALOG_PRICE_DOWNLOAD',\n\n /**\n * Выполнен поиск по каталогу.\n *\n * В качестве параметров должны быть указаны:\n * - тип поиска (параметр \"search_type\");\n * - терм поиска (параметр \"search_term\").\n */\n catalogSearch = 'CATALOG_SEARCH',\n\n /**\n * Открыто диалоговое окно/страница настроек каталога товаров.\n *\n * В качестве параметра должен быть указан идентификатор клиента (параметр \"uid\").\n */\n catalogSettingsShow = 'CATALOG_SETTINGS_SHOW',\n\n /**\n * Отправлено сообщение по обратной связи.\n */\n feedbackSent = 'FEEDBACK_SENT',\n\n /**\n * Открыто диалоговое окно/страница обратной связи.\n */\n feedbackShow = 'FEEDBACK_SHOW',\n\n /**\n * Выполнен клик по маркеру карты.\n *\n * В качестве параметров должно быть указано название маркера (параметр \"map_point_name\").\n */\n mapPointClick = 'MAP_POINT_CLICK',\n\n /**\n * Открыто диалоговое окно/страница с картой.\n */\n mapShow = 'MAP_SHOW',\n\n /**\n * Открыто диалоговое окно/страница с уведомлениями.\n */\n notificationsShow = 'NOTIFICATIONS_SHOW',\n\n /**\n * Заказ отменён.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор заказа (параметр \"order_id\");\n * - стоимость заказа (параметр \"cost\").\n */\n orderCancelled = 'ORDER_CANCELLED',\n\n /**\n * Заказ клонирован из другого заказа.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор исходного заказа (параметр \"order_id\");\n * - стоимость заказа (параметр \"cost\").\n */\n orderCloned = 'ORDER_CLONED',\n\n /**\n * Создан заказ.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор заказа (параметр \"order_id\", не передаётся для новой/неопределённой записи);\n * - стоимость заказа (параметр \"cost\").\n */\n orderCreated = 'ORDER_CREATED',\n\n /**\n * Заказ создан из черновика заказа.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор исходного заказа (параметр \"order_id\");\n * - стоимость заказа (параметр \"cost\").\n */\n orderCreatedFromDraft = 'ORDER_CREATED_FROM_DRAFT',\n\n /**\n * Заказ удалён.\n *\n * В качестве параметров должны быть указаны:\n * - идентификатор заказа (параметр \"order_id\");\n * - признак, что заказ является черновиком (параметр \"is_draft\");\n * - стоимость заказа (параметр \"cost\").\n */\n orderDeleted = 'ORDER_DELETED',\n\n /**\n * Открыто диалоговое окно/страница конфигуратора товара.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n productConfiguratorShow = 'PRODUCT_CONFIGURATOR_SHOW',\n\n /**\n * Открыто диалоговое окно/страница с подробным описанием товара.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n productInfoShow = 'PRODUCT_INFO_SHOW',\n\n /**\n * Выполнен клик по карте/графическому представлению товаров.\n *\n * В качестве параметра должен быть указан идентификатор логической группы товаров на карте (параметр \"virtual_group_id\" или \"virtual_group_name\").\n */\n productMapClick = 'PRODUCT_MAP_CLICK',\n\n /**\n * Выполнен клик по логической группе товаров.\n *\n * В качестве параметров должно быть указано откуда был произведен переход (from_location) и идентификатор логической группы товаров (параметр \"virtual_group_id\").\n */\n productVirtualGroupClick = 'PRODUCT_VIRTUAL_GROUP_CLICK',\n\n /**\n * Открыто диалоговое окно/страница истории изменения цен на товар.\n *\n * В качестве параметра должен быть указан идентификатор товара (параметр \"product_id\").\n */\n productPriceHistoryShow = 'PRODUCT_PRICE_HISTORY_SHOW',\n\n /**\n * Открыто диалоговое окно/страница с QR-кодом.\n *\n * В качестве параметров должно быть указано название открытого QR-кода (параметр \"qr_name\").\n */\n qrShow = 'QR_SHOW',\n\n /**\n * Пользователь ответил на опросник.\n */\n questionnaireAnswered = 'QUESTIONNAIRE_ANSWERED',\n\n /**\n * Открыто диалоговое окно/страница опросника.\n *\n * В качестве параметра должен быть указан идентификатор опроса (параметр \"questionnaire_id\").\n */\n questionnaireShow = 'QUESTIONNAIRE_SHOW',\n\n /**\n * Открыто диалоговое окно/страница добавления рекламации.\n *\n * В качестве параметра должен быть указан идентификатор рекламации (параметр \"reclamation_id\", не передаётся для новой записи).\n */\n reclamationAddShow = 'RECLAMATION_ADD_SHOW',\n\n /**\n * Код восстановления пароля отправлен.\n */\n recoverPasswordCodeSent = 'RECOVER_PASSWORD_CODE_SENT',\n\n /**\n * Открыто диалоговое окно/страница кода восстановления пароля.\n */\n recoverPasswordSendCodeShow = 'RECOVER_PASSWORD_SEND_CODE_SHOW',\n\n /**\n * Открыто диалоговое окно/страница восстановления пароля.\n */\n recoverPasswordShow = 'RECOVER_PASSWORD_SHOW',\n\n /**\n * Выполнен клик по одной из ссылок \"Поделиться\".\n *\n * В качестве параметров должно быть указано по какой именно ссылке произведён клик (параметр \"share_link_name\").\n */\n shareClick = 'SHARE_CLICK',\n\n /**\n * Открыто диалоговое окно/страница \"Поделиться\".\n */\n shareShow = 'SHARE_SHOW',\n\n /**\n * Пользователь вошёл в систему.\n *\n * В качестве параметра должен быть указан тип используемого входа (параметр \"sign_in_type\").\n */\n signedIn = 'SIGNED_IN',\n\n /**\n * Открыто диалоговое окно/страница входа в систему.\n */\n signInShow = 'SIGN_IN_SHOW',\n\n /**\n * Пользователь вышел из системы.\n */\n signedOut = 'SIGNED_OUT',\n\n /**\n * Пользователь завершил регистрацию.\n */\n signedUp = 'SIGNED_UP',\n\n /**\n * Пользователь нажал \"Показать еще ХХ товаров\".\n *\n * В качестве параметра должен быть указан идентификатор категории (параметр \"category_id\").\n */\n showMoreClick = 'SHOW_MORE_CLICK',\n\n /**\n * Открыто диалоговое окно/страница регистрации.\n */\n signUpShow = 'SIGN_UP_SHOW',\n\n /**\n * Открыто диалоговое окно/страница упрощенной регистрации.\n */\n simpleSsignUpShow = 'SIMPLE_SIGN_UP_SHOW',\n\n /**\n * Открыто диалоговое окно/страница подтверждения номера телефона пользователя.\n */\n userProfileApprovePhoneShow = 'USER_PROFILE_APPROVE_PHONE_SHOW',\n\n /**\n * Открыто диалоговое окно/страница редактирования профиля пользователя.\n */\n userProfileEditShow = 'USER_PROFILE_EDIT_SHOW',\n\n /**\n * Пользователь отредактировал профиль.\n */\n userProfileEdited = 'USER_PROFILE_EDITED',\n\n /**\n * Пользователь добавил данные о контактах.\n */\n userProfileContactAdded = 'USER_PROFILE_CONTACT_ADDED',\n\n /**\n * Открыто диалоговое окно/страница добавления данных о контактах.\n */\n userProfileContactAddShow = 'USER_PROFILE_CONTACT_ADD_SHOW',\n\n /**\n * Пользователь добавил данные о контрагенте.\n */\n userProfileContragentAdded = 'USER_PROFILE_CONTRAGENT_ADDED',\n\n /**\n * Открыто диалоговое окно/страница добавления данных о контрагенте.\n */\n userProfileContragentAddShow = 'USER_PROFILE_CONTRAGENT_ADD_SHOW',\n\n /**\n * Пользователь удалил данные о контрагенте.\n *\n * В качестве параметра должен быть указан идентификатор контрагента (параметр \"contragent_id\", не передаётся для новой записи).\n */\n userProfileContragentDeleted = 'USER_PROFILE_CONTRAGENT_DELETED',\n\n /**\n * Пользователь добавил данные об адресе доставки.\n */\n userProfileDeliveryAddressAdded = 'USER_PROFILE_DELIVERY_ADDRESS_ADDED',\n\n /**\n * Открыто диалоговое окно/страница добавления или редактирования данных об адресе доставки.\n */\n userProfileDeliveryAddressAddShow = 'USER_PROFILE_DELIVERY_ADDRESS_ADD_SHOW',\n\n /**\n * Пользователь удалил данные об адресе доставки.\n *\n * В качестве параметра должен быть указан идентификатор адреса доставки (параметр \"delivery_address_id\", не передаётся для новой записи).\n */\n userProfileDeliveryAddressDeleted = 'USER_PROFILE_DELIVERY_ADDRESS_DELETED',\n\n /**\n * Выполнен клик по вакансии.\n *\n * В качестве параметра должен быть указан идентификатор вакансии (параметр \"vacancy_id\" или \"vacancy_name\").\n */\n vacancyClick = 'VACANCY_CLICK',\n\n /**\n * Открыто диалоговое окно/страница вакансий.\n */\n vacancyShow = 'VACANCY_SHOW',\n\n /**\n * Выполнен клик по номеру телефона.\n *\n * В качестве параметра должен быть указан номер телефона (параметр \"phone\") и условное название блока где он расположен (параметр \"phone_location\").\n */\n phoneClick = 'PHONE_CLICK',\n\n /**\n * Выполнен клик по адресу электронной почты.\n *\n * В качестве параметра должен быть указан адрес электронной почты (параметр \"email\") и условное название блока где он расположен (параметр \"email_location\").\n */\n emailClick = 'EMAIL_CLICK',\n\n /**\n * Добавлены товары в корзину из файла CSV.\n */\n cartCsvUpload = 'CART_CSV_UPLOAD',\n}\n","/**\n * Перечисление типов пользователя.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScUserType {\n /**\n * Гость (неавторизованный пользователь).\n */\n guest = 'guest',\n\n /**\n * Клиент.\n */\n client = 'client',\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { ScUserType } from '../../user/enums/sc-user-type';\nimport { ScIUserMetrikaEvent } from '../dto';\n\n/**\n * Сервис для сбора метрик о действиях пользователей.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUserMetrikaService {\n /**\n * {@link Subject} событий сбора метрик.\n */\n private readonly handler$ = new Subject<ScIUserMetrikaEvent>();\n\n /**\n * Дополнительные параметры произошедшего события.\n */\n private additionalParams: Record<string, any> = {};\n\n /**\n * Генерирует событие с данными о действии пользователя.\n *\n * @param event Данные о произошедшем событии.\n */\n public emitUserMetrikaEvent(event: ScIUserMetrikaEvent): void {\n // Создаём копию объекта, чтобы иметь возможность дополнить его общими данными.\n this.handler$.next({\n target: event.target,\n params: { ...event.params, ...this.additionalParams },\n });\n }\n\n /**\n * Возвращает {@link Observable} для отслеживания событий метрик.\n */\n public getObservable$(): Observable<ScIUserMetrikaEvent> {\n return this.handler$.asObservable();\n }\n\n /**\n * Устанавливает параметры текущего пользователя.\n *\n * @param userId Идентификатор пользователя.\n * @param userType Тип пользователя.\n */\n public setUserParams(userId?: number, userType: ScUserType = ScUserType.guest): void {\n this.additionalParams['user_type'] = userType;\n\n if (userId) {\n this.additionalParams['user_id'] = userId;\n } else {\n delete this.additionalParams['user_id'];\n }\n }\n\n /**\n * Добавляет дополнительный общий параметр, отправляемый при каждом событии метрики.\n *\n * @param name Название параметра.\n * @param value Значение параметра.\n */\n public addCommonParam(name: string, value: any): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,security/detect-object-injection\n this.additionalParams[name] = value;\n }\n}\n","/* eslint-disable @typescript-eslint/unified-signatures */\n\nimport { HttpClient, HttpContext, HttpHeaders } from '@angular/common/http';\nimport { Inject, inject, Injectable } from '@angular/core';\nimport { combineLatest, debounceTime, map, Observable, of, partition, ReplaySubject, switchMap, tap } from 'rxjs';\n\nimport { ScIApiKeys } from '../../config/sc-i-api-keys';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { SC_AUTH_ADD_HEADER_REQUIRED } from '../../httpInterceptors/tokens/sc-auth-add-header-required';\nimport { SC_IS_LOGOUT_REQUEST } from '../../httpInterceptors/tokens/sc-is-logout-request';\nimport { SC_IS_REFRESH_REQUIRED } from '../../httpInterceptors/tokens/sc-is-refresh-token-required';\nimport { IS_SERVER } from '../../providers/ssr.providers';\nimport { SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT } from '../../tokens';\nimport { SC_API_KEYS } from '../../tokens/sc-api-keys';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { IAuthToken, ILogin, IPhoneLogin, IToken } from '../interfaces';\nimport { ScTokenService } from './sc-token.service';\n\n/**\n * Сервис аутентификации пользователей.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScAuthService {\n /**\n * {@link ReplaySubject} для событийной модели сервиса аутентификации.\n */\n private authSubject: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\n\n /**\n * Признак, что скрипт выполняется на сервере.\n */\n private readonly isServer: boolean = inject(IS_SERVER);\n\n /**\n * Инициализирует экземпляр класса {@link ScAuthService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n * @param apiKeys Заголовки ключей доступа к API.\n * @param tokenService Сервис ключей аутентификации.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n @Inject(SC_API_KEYS) private readonly apiKeys: ScIApiKeys,\n private readonly tokenService: ScTokenService,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {\n const [authState$, actions$] = partition(\n combineLatest({\n access: this.tokenService.accessAuthToken$.pipe(map((token) => token !== null)),\n guest: this.tokenService.guestToken$.pipe(map((token) => token !== null)),\n }).pipe(debounceTime(0)), // Исправляет ошибку одновременного удаления ключа гостя и ключа пользователя. Возникает при очистке Storage.\n ({ access, guest }) => (access && !guest) || (!access && guest)\n );\n authState$.subscribe(({ access }) => {\n this.authSubject.next(access);\n });\n actions$\n .pipe(\n switchMap(({ access }) => {\n if (access) {\n this.tokenService.removeGuestToken();\n\n return of(null);\n }\n\n return this.getGuestToken$();\n })\n )\n .subscribe();\n\n if (this.isServer) {\n this.authSubject.next(false);\n }\n }\n\n /**\n * Возвращает {@link Observable} состояния аутентификации, чтобы реагировать на изменения.\n */\n public getAuthChange(): Observable<boolean> {\n return this.authSubject.asObservable();\n }\n\n /**\n * Возвращает {@link Observable} запроса аутентификации пользователя.\n *\n * @param user Данные для аутентификации пользователя по email.\n */\n public getSignIn$(user: ILogin): Observable<IAuthToken>;\n\n /**\n * Возвращает {@link Observable} запроса аутентификации пользователя.\n *\n * @param user Данные для аутентификации пользователя по номеру телефона.\n */\n public getSignIn$(user: IPhoneLogin): Observable<IAuthToken>;\n\n /**\n * Возвращает {@link Observable} запроса аутентификации пользователя.\n *\n * @param user Данные о пользователе для аутентификации.\n */\n public getSignIn$(user: ILogin | IPhoneLogin): Observable<IAuthToken> {\n return this.http.post<IAuthToken>(`${this.urls.apiUrl}/auth/login`, user).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signedIn,\n params: { sign_in_type: 'password' in user ? 'login/password' : 'phone/code' },\n });\n }),\n tap((tokensObject: IAuthToken) => {\n this.tokenService.setAuthToken(tokensObject);\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса завершения аутентификации пользователя.\n *\n * @param removeAuthToken Признак, что необходимо удалить ключ аутентификации.\n */\n public getSignOut$(removeAuthToken: boolean = true): Observable<undefined> {\n return this.http\n .post<undefined>(\n `${this.urls.apiUrl}/auth/logout`,\n {},\n {\n context: new HttpContext().set(SC_IS_LOGOUT_REQUEST, true).set(SC_IS_HIDDEN_ERROR_ALERT, true),\n }\n )\n .pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signedOut,\n });\n\n if (removeAuthToken) {\n this.tokenService.removeAuthToken();\n }\n })\n );\n }\n\n /**\n * Выполняет запрос завершения аутентификации пользователя.\n */\n public signOut(): void {\n this.getSignOut$().subscribe();\n }\n\n /**\n * Возвращает {@link Observable} запроса повторной аутентификации пользователя и обновления ключа аутентификации.\n *\n * @param refreshTokens Ключи доступа к API, и обновления сессии доступа к API. Если ключи не переданы, берёт их из {@link Storage}.\n */\n public getRefreshToken$(refreshTokens?: IAuthToken): Observable<IAuthToken> {\n const refreshToken = refreshTokens?.refresh.token ?? this.tokenService.getRefreshToken();\n const requestOptions = refreshTokens\n ? {\n headers: new HttpHeaders().set(this.apiKeys.keyName, refreshTokens.access.token),\n context: new HttpContext().set(SC_IS_REFRESH_REQUIRED, true).set(SC_IS_HIDDEN_ERROR_ALERT, true).set(SC_AUTH_ADD_HEADER_REQUIRED, false),\n }\n : {\n context: new HttpContext().set(SC_IS_REFRESH_REQUIRED, true).set(SC_IS_HIDDEN_ERROR_ALERT, true),\n };\n\n return this.http.patch<IAuthToken>(`${this.urls.apiUrl}/auth/token`, { refresh_token: refreshToken }, requestOptions).pipe(\n tap((tokens: IAuthToken) => {\n this.tokenService.setAuthToken(tokens);\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса получения гостевого ключа.\n */\n public getGuestToken$(): Observable<IToken> {\n return this.http\n .get<IToken>(`${this.urls.apiUrl}/auth/guest/token`, {\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(\n tap((token: IToken) => {\n this.tokenService.setGuestToken(token);\n })\n );\n }\n}\n","import { ScIBanner } from './sc-i-banner';\n\n/**\n * Данные баннера.\n */\nexport class ScBanner implements ScIBanner {\n /**\n * Идентификатор баннера.\n */\n public id: number;\n\n /**\n * Местоположения баннера на странице пользователя.\n */\n public location: string;\n\n /**\n * Тип медиафайла.\n */\n public mediaType: 'image' | 'video';\n\n /**\n * Относительный путь к медиафайлу баннера.\n */\n public mediaFile: string;\n\n /**\n * Относительный путь к медиафайлу баннера в формате WebP.\n */\n public mediaFileWebp?: string;\n\n /**\n * Заголовок баннера.\n */\n public title: string;\n\n /**\n * Ссылка, на которую должен вести баннер.\n */\n public url: string;\n\n /**\n * Ширина баннера в px.\n */\n public width: number;\n\n /**\n * Высота баннера в px.\n */\n public height: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScBanner}.\n *\n * @param bannerDTO Данные для инициализации.\n */\n public constructor(bannerDTO: ScIBanner) {\n this.id = bannerDTO.id;\n this.location = bannerDTO.location;\n this.mediaType = bannerDTO.mediaType;\n this.mediaFile = bannerDTO.mediaFile;\n this.mediaFileWebp = bannerDTO.mediaFileWebp;\n this.title = bannerDTO.title;\n this.url = bannerDTO.url;\n this.width = bannerDTO.width;\n this.height = bannerDTO.height;\n }\n\n /**\n * Возвращает признак того, что баннер является изображением.\n */\n public get isImage(): boolean {\n return this.mediaType === 'image';\n }\n\n /**\n * Возвращает признак того, что баннер является видео.\n */\n public get isVideo(): boolean {\n return this.mediaType === 'video';\n }\n}\n","/**\n * Перечисление типов клиента.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScClientType {\n /**\n * Физическое лицо.\n */\n person = 'person',\n\n /**\n * Индивидуальный предприниматель.\n */\n ic = 'ic',\n\n /**\n * Юридическое лицо.\n */\n org = 'org',\n}\n","import { ScClientType, ScUserType } from '../enums';\nimport { ScIUserDTO } from '../internal/dto';\nimport { ScApprovedData } from './sc-approved-data';\nimport { ScIManager } from './sc-i-manager';\nimport { ScUserMetadata } from './sc-user-metadata';\n\n/**\n * Модель данных пользователя.\n */\nexport class ScUser {\n /**\n * Идентификатор пользователя.\n */\n public id: number;\n\n /**\n * Ф.И.О. пользователя.\n */\n public name: string;\n\n /**\n * Тип пользователя.\n */\n public userType?: ScUserType;\n\n /**\n * Тип клиента.\n */\n public clientType?: ScClientType;\n\n /**\n * Данные о возможных способах связи.\n */\n public contacts: {\n /**\n * Адрес электронной почты.\n */\n email: ScApprovedData;\n\n /**\n * Номер телефона. В формате \"79203436527\" или \"+79203436527\".\n */\n phone: ScApprovedData;\n };\n\n /**\n * Дата регистрации пользователя.\n */\n public createdAt: string;\n\n /**\n * URI путь к фотографии пользователя.\n */\n public photo?: string;\n\n /**\n * Признак необходимости получения новостей.\n */\n public getNews: boolean;\n\n /**\n * Направление продаж.\n */\n public direction: number = 1;\n\n /**\n * Метаданные (дополнительные данные, используемые в процессе функционирования системы) в свободной форме.\n */\n public metadata: Partial<ScUserMetadata>;\n\n /**\n * Список менеджеров клиента.\n */\n public managers?: ScIManager[];\n\n /**\n * Идентификатор записи города.\n */\n public city?: number;\n\n /**\n * Дата последнего изменения прайс-листа.\n */\n public priceDate?: string;\n\n /**\n * Данные о задолженности/переплате.\n */\n public debt?: number;\n\n /**\n * Идентификатор региона пользователя.\n */\n public region?: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScUser}.\n *\n * @param userDTO DTO с данными о пользователе.\n */\n public constructor(userDTO: ScIUserDTO | Pick<ScIUserDTO, 'metadata'>) {\n if ('id' in userDTO) {\n this.id = userDTO.id;\n this.name = userDTO.name;\n this.userType = userDTO.userType ?? ScUserType.guest;\n this.clientType = userDTO.clientType ?? ScClientType.person;\n\n // eslint-disable-next-line no-param-reassign\n userDTO.contacts.phone.value = userDTO.contacts.phone.value.startsWith('+') ? userDTO.contacts.phone.value : `+${userDTO.contacts.phone.value}`;\n\n this.contacts = userDTO.contacts;\n this.createdAt = userDTO.createdAt;\n this.getNews = userDTO.getNews;\n this.direction = userDTO.direction;\n this.metadata = userDTO.metadata;\n this.managers = userDTO.managers;\n this.city = userDTO.city;\n this.priceDate = userDTO.priceDate;\n this.debt = userDTO.debt;\n this.region = userDTO.region;\n } else {\n this.userType = ScUserType.guest;\n this.metadata = userDTO.metadata;\n }\n }\n\n /**\n * Признак того, что пользователь является юр. лицом.\n */\n public get isOrg(): boolean {\n return this.clientType === ScClientType.org;\n }\n\n /**\n * Признак того, что пользователь является гостем.\n */\n public get isGuest(): boolean {\n return this.userType === ScUserType.guest;\n }\n\n /**\n * Округлённая задолженность. В шаблоне не определён {@link Math}.\n */\n public get absDebt(): number {\n return Math.abs(this.debt ?? 0);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { WA_LOCAL_STORAGE } from '@ng-web-apis/common';\nimport { filterByKey, StorageService, toValue, WA_STORAGE_EVENT } from '@ng-web-apis/storage';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { filter, map, Observable, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\nimport { IAuthToken } from '../../auth/interfaces';\nimport { ScAuthService } from '../../auth/services/sc-auth.service';\nimport { ScTokenService } from '../../auth/services/sc-token.service';\nimport { IS_BROWSER } from '../../providers/ssr.providers';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScISimpleUserOnDataCreate } from '../dto';\nimport { ScIChangePassword } from '../dto/sc-i-change-password';\nimport { ScIPasswordOnDataUpdate } from '../dto/sc-i-password-on-data-create';\nimport { ScIPhoneOnDataApprove } from '../dto/sc-i-phone-on-data-approve';\nimport { ScIUserOnDataCreate } from '../dto/sc-i-user-on-data-create';\nimport { ScIUserOnDataUpdate } from '../dto/sc-i-user-on-data-update';\nimport { ScUser } from '../dto/sc-user';\nimport { ScIUserDTO } from '../internal/dto';\n\n/**\n * Сервис информации о пользователе.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUserService {\n /**\n * {@link Observable} Событие изменения в {@link Storage}.\n */\n private readonly storageEvent$: Observable<StorageEvent> = inject(WA_STORAGE_EVENT);\n\n /**\n * Сервис для работы с {@link Storage}.\n */\n private readonly storageService: Storage = inject(StorageService);\n\n /**\n * {@link Storage}.\n */\n private readonly storage: Storage | null = inject(WA_LOCAL_STORAGE, { optional: true });\n\n /**\n * Признак, что скрипт выполняется в браузере.\n */\n private readonly isBrowser: boolean = inject(IS_BROWSER);\n\n /**\n * {@link Observable} ключа доступа пользователя к API в {@link Storage}.\n */\n private readonly user$: Observable<ScUser> = this.storageEvent$.pipe(\n filterByKey('userData'),\n toValue(),\n map((userData) => (userData ? new ScUser(JSON.parse(userData) as ScIUserDTO) : null)),\n startWith(this.storage && this.isBrowser ? null : new ScUser({ metadata: {} })), // Инициализация пользователя при SSR для корректной работы связанных сервисов.\n filter(tuiIsPresent),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n\n /**\n * Сервис для работы с токенами.\n */\n private readonly tokenService = inject(ScTokenService);\n\n /**\n * Сервис аутентификации.\n */\n private readonly authService = inject(ScAuthService);\n\n /**\n * Список ссылок на разделы backend'a.\n */\n private readonly urls = inject(SC_URLS);\n\n /**\n * HTTP-клиент.\n */\n private readonly http = inject(HttpClient);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Выполняет инициализацию сервиса.\n */\n public initService(): void {\n if (this.isBrowser) {\n this.authService\n .getAuthChange()\n .pipe(switchMap((state) => (state ? this.getUserInfo$() : this.getGuestInfo$())))\n .subscribe((user) => {\n this.userMetrikaService.setUserParams(user.id, user.userType);\n this.setUserToStorage(user);\n });\n } else {\n this.setUserToStorage(new ScUser({ metadata: {} }));\n }\n }\n\n /**\n * Устанавливает данные пользователя в {@link Storage}.\n *\n * @param user Данные пользователя.\n */\n private setUserToStorage(user: ScUser): void {\n if (this.storage && this.isBrowser) {\n this.storageService.setItem('userData', JSON.stringify(user));\n }\n }\n\n /**\n * Возвращает {@link Observable} запроса изменения информации о текущем пользователе.\n *\n * @param newData Данные пользователя, которые нужно обновить.\n */\n public updateUserInfo$(newData: ScIUserOnDataUpdate | ScIChangePassword | ScIPhoneOnDataApprove): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/user`, newData).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileEdited,\n });\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса изменения информации о текущем пользователе-госте.\n *\n * @param newData Данные пользователя-гостя, которые нужно обновить.\n */\n public updateGuestInfo$(newData: Pick<ScIUserOnDataUpdate, 'metadata'>): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/guest`, newData);\n }\n\n /**\n * Возвращает {@link Observable} запроса регистрации пользователя.\n *\n * @param user Данные для регистрации.\n * @param withAuth Флаг, указывающий, нужно ли устанавливать токен аутентификации.\n */\n public signUp$(user: ScIUserOnDataCreate | ScISimpleUserOnDataCreate, withAuth: boolean = true): Observable<IAuthToken> {\n return this.http.post<IAuthToken>(`${this.urls.apiUrl}/user/register`, user).pipe(\n tap((token) => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signedUp,\n });\n\n if (withAuth) {\n this.tokenService.setAuthToken(token);\n }\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса на отправку кода изменения пароля на электронную почту.\n *\n * @param email Адрес электронной почты.\n */\n public sendResetPasswordCode$(email: string): Observable<undefined> {\n return this.http.get<undefined>(`${this.urls.apiUrl}/auth/password/restore`, { params: { email: email } });\n }\n\n /**\n * Возвращает {@link Observable} запроса изменения пароля.\n *\n * @param newPassword Данные для изменения пароля.\n */\n public resetPassword$(newPassword: ScIPasswordOnDataUpdate): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/auth/password/restore`, newPassword);\n }\n\n /**\n * Возвращает {@link Observable} текущего пользователя.\n */\n public getUserChange$(): Observable<ScUser> {\n return this.user$;\n }\n\n /**\n * Обновляет данные {@link Observable} текущего пользователя.\n */\n public updateUserChange$(): Observable<ScUser> {\n return this.getUserInfo$().pipe(\n tap((user) => {\n this.setUserToStorage(user);\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса на получение информации о текущем пользователе.\n */\n public getUserInfo$(): Observable<ScUser> {\n return this.http.get<ScIUserDTO>(`${this.urls.apiUrl}/user`).pipe(map((user) => new ScUser(user)));\n }\n\n /**\n * Обновляет данные {@link Observable} текущего пользователя.\n */\n public updateGuestChange$(): Observable<ScUser> {\n return this.getGuestInfo$().pipe(\n tap((user) => {\n this.setUserToStorage(user);\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} запроса на получение информации о текущем пользователе.\n */\n private getGuestInfo$(): Observable<ScUser> {\n return this.http.get<ScIUserDTO>(`${this.urls.apiUrl}/guest`).pipe(map((user) => new ScUser(user)));\n }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { distinctUntilChanged, Observable } from 'rxjs';\n\nimport { ScUser } from '../dto/sc-user';\nimport { ScUserService } from '../services/sc-user.service';\n\n/**\n * Токен потока данных о текущем пользователе.\n */\nexport const SC_USER_INFO: InjectionToken<Observable<ScUser>> = tuiCreateTokenFromFactory(() =>\n inject(ScUserService)\n .getUserChange$()\n .pipe(\n distinctUntilChanged((previous, current) => !current.isGuest && previous.id === current.id),\n takeUntilDestroyed()\n )\n);\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, Observable, shareReplay, switchMap } from 'rxjs';\n\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScBanner } from '../dto/sc-banner';\nimport { ScIBanner } from '../dto/sc-i-banner';\n\n/**\n * Сервис для работы с баннерами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScBannerService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Список баннеров.\n */\n public readonly banners$: Observable<ScBanner[]> = inject(SC_USER_INFO).pipe(\n switchMap(() => this.http.get<ScIBanner[]>(`${this.urls.apiUrl}/banners`)),\n map((banners) => banners.map((banner) => new ScBanner(banner))),\n shareReplay(1)\n );\n}\n","export const EMPTY_CART = { items: [], result_sum: { rub: 0 }, directions_sum: {} };\n","/**\n * Модель данных итоговой суммы.\n */\nexport class ScSum {\n /**\n * Инициализирует экземпляр класса {@link ScSum}.\n *\n * @param rub Итоговая сумма в рублях.\n */\n public constructor(public rub: number = 0) {}\n}\n","import { ScISeoResourceDTO } from '../internal/sc-i-seo-resource-dto';\nimport { ScISeo } from './sc-i-seo';\nimport { ScISeoResource } from './sc-i-seo-resource';\n\n/**\n * Модель данных объекта имеющего SEO данные.\n */\nexport class ScSeoResource implements ScISeoResource {\n /**\n * SEO данные.\n */\n public seo?: ScISeo;\n\n /**\n * Ссылка на основное изображение.\n */\n public image?: string;\n\n /**\n * Инициализирует экземпляр класса {@link ScSeoResource}.\n *\n * @param seoResourceDTO Данные для инициализации.\n */\n public constructor(seoResourceDTO: ScISeoResource | ScISeoResourceDTO | null | undefined) {\n if (!seoResourceDTO) {\n return;\n }\n\n if ('_Seo' in seoResourceDTO) {\n // eslint-disable-next-line no-underscore-dangle\n this.seo = seoResourceDTO._Seo;\n } else if ('seo' in seoResourceDTO) {\n this.seo = seoResourceDTO.seo;\n }\n }\n}\n","/* eslint-disable no-use-before-define */\nimport { ScIConfiguratorSettingsBase } from '../../configurator/dto/sc-i-configurator-settings-base';\nimport { ScICategoryDTO } from '../internal/sc-i-category-dto';\nimport { ScIFilterTreeCategory } from '../internal/sc-i-filter-tree-category';\nimport { ScIProperties } from './sc-i-properties';\nimport { ScProduct } from './sc-product';\nimport { ScSeoResource } from './sc-seo-resource';\n\n/**\n * Модель данных категории товаров.\n */\nexport class ScCategory extends ScSeoResource implements ScICategoryDTO {\n /**\n * Признак, что категория является избранной для клиента.\n *\n * @deprecated\n */\n public get isFavorite(): boolean {\n return this.isFavoriteValue;\n }\n\n /**\n * Идентификатор категории.\n */\n public id: number;\n\n /**\n * Символьное обозначение (slug) категории.\n */\n public slug: string;\n\n /**\n * Название категории.\n */\n public name: string;\n\n /**\n * Признак того, что категория является основной для некоторого товара или услуги.\n */\n public isPrimary?: boolean;\n\n /**\n * Список свойств. Число свойств в объекте не ограничено.\n */\n public properties?: ScIProperties;\n\n /**\n * Объект родительской категории.\n */\n public parentCategory?: ScCategory;\n\n /**\n * Список дочерних категорий.\n */\n public categories?: ScCategory[];\n\n /**\n * Признак наличия дочерних категорий.\n */\n public hasChild?: boolean;\n\n /**\n * Дата загрузки категории.\n *\n * @deprecated\n */\n public loadedAt?: Date;\n\n /**\n * Признак, что информация о категории загружается.\n *\n * @deprecated\n */\n public isLoading: boolean = false;\n\n /**\n * Список товаров в категории.\n */\n public products?: ScProduct[];\n\n /**\n * Настройки конфигуратора.\n */\n public configuratorSettings?: ScIConfiguratorSettingsBase;\n\n /**\n * Признак, что в категории необходимо отобразить конфигуратор.\n */\n public showConfigurator?: boolean;\n\n /**\n * Фильтры категории древовидного представления каталога.\n *\n * @deprecated\n */\n public filter?: ScIFilterTreeCategory | '*' = '*';\n\n /**\n * Признак, что категория является скелетоном.\n *\n * @deprecated\n */\n public isSkeleton: boolean = false;\n\n /**\n * Признак, что категория является избранной для клиента.\n */\n private isFavoriteValue: boolean;\n\n /**\n * Инициализирует экземпляр класса {@link ScCategory}.\n *\n * @param categoryDTO DTO с данными о категории товаров.\n */\n public constructor(categoryDTO: ScICategoryDTO) {\n super(categoryDTO);\n\n this.id = categoryDTO.id;\n this.slug = categoryDTO.slug;\n this.name = categoryDTO.name;\n this.isPrimary = categoryDTO.isPrimary;\n this.isFavoriteValue = Boolean(categoryDTO.isFavorite);\n this.properties = categoryDTO.properties;\n this.parentCategory = categoryDTO.parentCategory && new ScCategory(categoryDTO.parentCategory);\n this.hasChild = categoryDTO.hasChild;\n this.categories = categoryDTO.categories?.map((item) => new ScCategory(item));\n this.image = categoryDTO.properties?.image;\n\n if (this.properties?.editor) {\n this.showConfigurator = true;\n }\n }\n\n /**\n * Возвращает среднюю стоимость м2.\n */\n public get m2Price(): string | undefined {\n return this.properties?.m2Price && `${this.properties.m2Price} ₽/м<sup>2</sup>`;\n }\n\n /**\n * Признак, что в категории есть товары для отображения.\n */\n public get isNotHiddenProducts(): boolean {\n return this.products?.find((product) => !product.isHiddenFilter) !== undefined;\n }\n\n /**\n * Признак, что в категории или вложенных подкатегориях есть товары для отображения.\n */\n public get isNotHiddenProductsIncludeSubcategories(): boolean {\n return (\n this.products?.find((product) => !product.isHiddenFilter) !== undefined ||\n this.categories?.find((category) => category.isNotHiddenProductsIncludeSubcategories) !== undefined\n );\n }\n\n /**\n * Признак, что категория является избранной для клиента.\n *\n * @deprecated\n */\n // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures,grouped-accessor-pairs,sort-class-members/sort-class-members\n public set isFavorite(isFavorite: boolean) {\n this.isFavoriteValue = isFavorite;\n\n this.categories?.forEach((category) => {\n // eslint-disable-next-line no-param-reassign\n category.isFavorite = isFavorite;\n });\n this.products\n ?.filter((product) => product.primaryCategory?.id === this.id)\n .forEach((product) => {\n // eslint-disable-next-line no-param-reassign\n product.isFavorite = isFavorite;\n });\n\n if (!isFavorite && this.parentCategory) {\n this.setIsFavoriteFromChild(isFavorite);\n }\n }\n\n /**\n * Добавляет информацию о родителе и дочерних элементах.\n *\n * @param category Категория содержащая информацию о родителе и дочерних элементах.\n * @deprecated\n */\n public addCategories(category: ScCategory): this {\n this.categories = category.categories ?? [];\n this.products = category.products ?? this.products;\n this.loadedAt = new Date();\n this.categories.forEach((item) => {\n // eslint-disable-next-line no-param-reassign\n item.parentCategory = this;\n });\n this.products?.forEach((product) => {\n // eslint-disable-next-line no-param-reassign\n product.parentCategory = this;\n if (product.primaryCategory?.id === this.id) {\n // eslint-disable-next-line no-param-reassign\n product.primaryCategory = this;\n }\n });\n this.setChildrenCategoriesFilters();\n this.setProductFilters();\n\n return this;\n }\n\n /**\n * Устанавливает фильтры категории древовидного представления каталога.\n *\n * @param filter Фильтры категории древовидного представления каталога.\n * @deprecated\n */\n public setFilter(filter: ScIFilterTreeCategory | '*' | undefined): void {\n this.filter = filter;\n\n this.setChildrenCategoriesFilters();\n this.setProductFilters();\n }\n\n /**\n * Устанавливает фильтры категории древовидного представления каталога для дочерних категорий.\n *\n * @deprecated\n */\n public setChildrenCategoriesFilters(): void {\n this.categories?.forEach((item) => {\n item.setFilter(this.filter === '*' || this.filter === undefined ? this.filter : this.filter.categories?.[item.id]);\n });\n }\n\n /**\n * Устанавливает фильтры категории древовидного представления каталога для товаров.\n *\n * @deprecated\n */\n public setProductFilters(): void {\n this.products?.forEach((product) => {\n // eslint-disable-next-line no-param-reassign,@typescript-eslint/prefer-includes\n product.isHiddenFilter = !(this.filter === '*' || this.filter?.products?.indexOf(product.id) !== -1);\n });\n }\n\n /**\n * Возвращает признак того, что категория загружена и срок жизни данных не истёк.\n *\n * @param categoryData Срок жизни информации о категории в ms.\n * @deprecated\n */\n public cachedDataIsActual(categoryData: number): boolean {\n return this.loadedAt !== undefined && this.loadedAt.getTime() > Date.now() - categoryData;\n }\n\n /**\n * Переключает признак отображения конфигуратора.\n *\n * @deprecated\n */\n public toggleShowConfigurator(): void {\n this.showConfigurator = !this.showConfigurator;\n }\n\n /**\n * Выполняет сортировку товаров по заданной функции в категории и дочерних подкатегориях.\n *\n * @param sortFcn Функция сортировки товаров.\n * @deprecated\n */\n public sortProduct(sortFcn: ((a: ScProduct, b: ScProduct) => number) | undefined) {\n this.products = this.products?.sort(sortFcn);\n this.categories?.forEach((category) => {\n category.sortProduct(sortFcn);\n });\n }\n\n /**\n * Устанавливает флаг избранных товаров клиента всем вложенным позициям на основе флага из родительской категории.\n *\n * @param isFavorite Признак, что категория являются избранной для клиента.\n * @deprecated\n */\n public setIsFavoriteFromChild(isFavorite: boolean): void {\n this.parentCategory?.setIsFavoriteFromChild(isFavorite);\n this.products\n ?.filter((product) => product.primaryCategory?.id === this.id)\n .forEach((product) => {\n // eslint-disable-next-line no-param-reassign\n product.isFavorite = isFavorite;\n });\n this.isFavoriteValue = isFavorite;\n }\n}\n","import { TuiDay } from '@taiga-ui/cdk';\n\nimport { ScCartItem } from '../../cart/dto/sc-cart-item';\nimport { ScIWarehouseStockCount } from '../../warehouse/dto/sc-i-warehouse-stock-count';\nimport { ScIWarehouse } from '../../warehouse/dto/sc-warehouse';\nimport { ScIProductDTO } from '../internal/sc-i-product-dto';\nimport { ScPriceHistory } from '../types/sc-price-history';\nimport { ScCategory } from './sc-category';\nimport { ScIDiscount } from './sc-i-discount';\nimport { ScIProductImages } from './sc-i-product-images';\nimport { ScIProperties } from './sc-i-properties';\nimport { ScSeoResource } from './sc-seo-resource';\n\n/**\n * Модель данных товара/услуги.\n */\nexport class ScProduct extends ScSeoResource implements ScIProductDTO {\n /**\n * Идентификатор товара/услуги.\n */\n public id: number;\n\n /**\n * Символьное обозначение (slug) товара.\n */\n public slug: string;\n\n /**\n * Артикул.\n */\n public code: string;\n\n /**\n * Артикул поставщика.\n */\n public supplierSku?: string;\n\n /**\n * Название товара.\n */\n public name: string;\n\n /**\n * Стоимость товара или услуги в валюте.\n */\n public cost?: number;\n\n /**\n * Стоимость товара или услуги в рублях.\n */\n public costRub?: number;\n\n /**\n * Дата установки цены.\n */\n public costDate?: string;\n\n /**\n * Валюта товара или услуги.\n */\n public currency: string;\n\n /**\n * Единица измерения.\n */\n public unit: string;\n\n /**\n * Единица измерения количества товара.\n */\n public quantityUnit: string;\n\n /**\n * Минимальное количество товара для заказа.\n */\n public minCount?: number;\n\n /**\n * Данные о количество товара, доступном на складах.\n */\n public stockCount?: ScIWarehouseStockCount[];\n\n /**\n * Признак товара \"Под заказ\".\n */\n public onOrder?: boolean;\n\n /**\n * Норма упаковки.\n */\n public pack?: string;\n\n /**\n * Признак, что товар, услуга или категория являются избранными для клиента.\n */\n public isFavorite: boolean;\n\n /**\n * Признак, что товар или услуга, был ранее заказан.\n */\n public isPreviouslyOrdered?: boolean;\n\n /**\n * Список изображений.\n */\n public readonly images?: readonly ScIProductImages[];\n\n /**\n * Список категорий товара.\n */\n public categories: ScCategory[];\n\n /**\n * Список свойств. Число свойств в объекте не ограничено.\n */\n public properties?: ScIProperties;\n\n /**\n * Данные о клиентской скидке.\n */\n public discount?: ScIDiscount;\n\n /**\n * Родительская категория, в которой находится товар или услуга.\n */\n public parentCategory?: ScCategory;\n\n /**\n * Основная категория для товара или услуги.\n */\n public primaryCategory?: ScCategory;\n\n /**\n * Признак наличия изображения у товара.\n */\n public hasImage: boolean = false;\n\n /**\n * Объект элемента корзины.\n */\n public cartItem?: ScCartItem;\n\n /**\n * Признак, что товар отсутствует.\n */\n public isNull: boolean = false;\n\n /**\n * Порядок следования товара в списке.\n */\n public ord: number;\n\n /**\n * Признак того, что товар скрыли фильтром.\n */\n public isHiddenFilter: boolean = false;\n\n /**\n * История изменения цены товара или услуги.\n */\n public priceHistory?: ScPriceHistory;\n\n /**\n * Признак необходимости игнорировать проверку минимального количества и кратности при добавлении товара в корзину и создании заказа.\n */\n public ignoreMinCountCheck: boolean = false;\n\n /**\n * Признак того, что продукт является скрытым.\n */\n public isHidden?: boolean;\n\n /**\n * Инициализирует экземпляр класса {@link ScProduct}.\n *\n * @param productDTO Данные о продукте.\n * @param ord Порядок следования продукта в списке.\n */\n public constructor(productDTO: ScIProductDTO | null, ord: number = 0) {\n super(productDTO);\n\n if (productDTO === null) {\n this.isNull = true;\n this.name = 'Товар не найден';\n } else {\n this.id = productDTO.id;\n this.slug = productDTO.slug;\n this.supplierSku = productDTO.supplierSku;\n this.name = productDTO.name;\n this.cost = productDTO.cost;\n this.costRub = productDTO.costRub;\n this.costDate = productDTO.costDate;\n this.currency = productDTO.currency;\n this.code = productDTO.code;\n this.unit = productDTO.unit;\n this.quantityUnit = productDTO.quantityUnit;\n this.minCount = productDTO.minCount;\n this.stockCount = productDTO.stockCount;\n this.onOrder = productDTO.onOrder;\n this.pack = productDTO.pack;\n this.isFavorite = Boolean(productDTO.isFavorite);\n this.isPreviouslyOrdered = productDTO.isPreviouslyOrdered;\n this.hasImage = (productDTO.images && productDTO.images.length > 0) ?? false;\n this.images = productDTO.images?.slice().sort((img1, img2) => Number(img2.isDefault) - Number(img1.isDefault));\n this.image = productDTO.images?.find((img) => img.isDefault)?.image ?? productDTO.properties?.image;\n this.categories = productDTO.categories.map((category) => new ScCategory(category));\n this.primaryCategory = this.categories.find((item) => item.isPrimary);\n this.ignoreMinCountCheck = productDTO.properties?.ignoreMinCountCheck ?? this.properties?.ignoreMinCountCheck ?? this.ignoreMinCountCheck;\n this.properties = productDTO.properties;\n this.discount = productDTO.discount;\n this.ord = ord;\n this.isHidden = productDTO.isHidden;\n }\n }\n\n /**\n * Стоимость товара или услуги с валютой и единицей измерения.\n */\n public get costString(): string {\n return this.cost ? `${this.cost.toLocaleString()} ${this.currency} / ${this.unit}` : '';\n }\n\n /**\n * Стоимость товара или услуги в рублях и с единицей измерения.\n */\n public get costRubString(): string {\n return this.costRub ? `${this.costRub.toLocaleString()} ₽ / ${this.unit}` : '';\n }\n\n /**\n * Стоимость товара или услуги с валютой и единицей измерения до применения скидки.\n */\n public get discountCostString(): string {\n return this.discount?.oldCost ? `${this.discount.oldCost.toLocaleString()} ${this.currency} / ${this.unit}` : '';\n }\n\n /**\n * Признак, что товар продаётся в рублях.\n */\n public get priceInRub(): boolean {\n return this.currency === '₽';\n }\n\n /**\n * Возвращает первое изображение товара. Если изображений нет, то возвращает undefined.\n *\n * @param imgIndex Индекс изображения в массиве.\n */\n public getImage(imgIndex: number = 0): string | undefined {\n return this.images?.[`${imgIndex}`].image;\n }\n\n /**\n * Возвращает основное изображение товара в формате WebP. Если WebP изображения нет, то возвращает undefined.\n *\n * @param imgIndex Индекс изображения в массиве.\n */\n public getImageWebp(imgIndex: number = 0): string | undefined {\n return this.images?.[`${imgIndex}`].imageWebp;\n }\n\n /**\n * Возвращает первое превью-изображение товара. Если превью-изображений нет, то возвращает undefined.\n *\n * @param imgIndex Индекс превью-изображения в массиве.\n */\n public getImagePreview(imgIndex: number = 0): string | undefined {\n return this.images?.[`${imgIndex}`].preview;\n }\n\n /**\n * Возвращает превью-изображение товара в формате WebP. Если WebP превью нет, то возвращает undefined.\n *\n * @param imgIndex Индекс превью-изображения в массиве.\n */\n public getImagePreviewWebp(imgIndex: number = 0): string | undefined {\n return this.images?.[`${imgIndex}`].previewWebp;\n }\n\n /**\n * Возвращает количество товара на складе (остаток).\n *\n * @param warehouseId Идентификатор склада.\n */\n public getWarehouseStockCount(warehouseId: number): number {\n return this.stockCount?.find((sc) => sc.warehouseId === warehouseId)?.count ?? 0;\n }\n\n /**\n * Возвращает признак, что имеется остаток товара на складе.\n *\n * @param warehouseId Идентификатор склада.\n */\n public isWarehouseStockExist(warehouseId: number): boolean {\n return !this.onOrder && this.stockCount?.find((sc) => sc.warehouseId === warehouseId) !== undefined;\n }\n\n /**\n * Возвращает сообщение об отсутствии товара.\n *\n * @param warehouse Идентификатор склада.\n */\n public getNotStockMessage(warehouse: ScIWarehouse): string | undefined {\n if (this.onOrder ?? this.isWarehouseStockExist(warehouse.id)) {\n return undefined;\n }\n\n const planingDate = this.properties?.planingIncomingDate ?? this.properties?.planingProductionDate;\n\n if (!warehouse.isMain || planingDate === undefined) {\n return 'Раскупили';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const daysDiff = TuiDay.lengthBetween(TuiDay.currentLocal(), TuiDay.normalizeParse(planingDate, 'DMY'));\n\n switch (daysDiff) {\n case 0:\n return 'Будет сегодня';\n case 1:\n return 'Будет завтра';\n case 2:\n return 'Будет послезавтра';\n default:\n return `Ожидается ${planingDate}`;\n }\n }\n}\n","import { ScProduct } from '../../catalog/dto/sc-product';\nimport { ScIConfiguratorSearchProductBase } from '../../configurator/dto/sc-i-configurator-search-product-base';\nimport { ScICartItemDTO } from '../internal/sc-i-cart-item-dto';\n\n/**\n * Единичная позиция товара/услуги в корзине.\n */\nexport class ScCartItem {\n /**\n * Идентификатор позиции товара в корзине.\n */\n public id: number;\n\n /**\n * Данные о товаре.\n */\n public product: ScProduct;\n\n /**\n * Количество товара/услуги.\n */\n public quantity: number;\n\n /**\n * Валюта товара или услуги.\n */\n public currency: string;\n\n /**\n * Итоговая стоимость товара или услуги в валюте.\n */\n public cost: number;\n\n /**\n * Стоимость единицы товара или услуги в валюте.\n */\n public costOne: number;\n\n /**\n * Стоимость единицы товара или услуги в рублях.\n */\n public costOneRub: number;\n\n /**\n * Итоговая стоимость позиции корзины.\n */\n public costRub: number;\n\n /**\n * Описание позиции.\n */\n public marker?: string;\n\n /**\n * Высота товара.\n */\n public height?: number;\n\n /**\n * Длина товара.\n */\n public length?: number;\n\n /**\n * Ширина товара.\n */\n public width?: number;\n\n /**\n * Идентификатор логической группы товаров/услуг.\n */\n public logicGroupId?: string;\n\n /**\n * Направление продаж.\n */\n public salesDirection?: number;\n\n /**\n * URL изображения со спецификацией.\n */\n public specificationImgUrl?: string;\n\n /**\n * Название конфигуратора.\n */\n public configurator?: string;\n\n /**\n * Параметры введенные в конфигуратор, при добавлении позиции в корзину.\n */\n public configuratorParams?: ScIConfiguratorSearchProductBase;\n\n /**\n * Инициализирует экземпляр класса {@link ScCartItem}.\n *\n * @param cartItemDTO DTO единичной позиции товара/услуги в корзине.\n */\n public constructor(cartItemDTO: ScICartItemDTO) {\n this.id = cartItemDTO.id;\n this.product = new ScProduct(cartItemDTO.product);\n this.quantity = cartItemDTO.quantity;\n this.currency = cartItemDTO.currency;\n this.cost = cartItemDTO.cost;\n this.costOne = cartItemDTO.costOne;\n this.costRub = cartItemDTO.costRub;\n this.costOneRub = cartItemDTO.costOneRub;\n this.marker = cartItemDTO.marker;\n this.height = cartItemDTO.height;\n this.length = cartItemDTO.length;\n this.width = cartItemDTO.width;\n this.logicGroupId = cartItemDTO.logicGroupId;\n this.salesDirection = cartItemDTO.salesDirection;\n this.specificationImgUrl = cartItemDTO.specificationImgUrl;\n this.configurator = cartItemDTO.configurator;\n this.configuratorParams = cartItemDTO.configuratorParams;\n }\n\n /**\n * Возвращает стоимость единицы товара (включая валюту). Если стоимость отсутствует, то вернёт '-'.\n */\n public getCostPerItem(): string {\n return this.costOne > 0 ? `${this.costOne.toLocaleString()} ${this.currency}` : '-';\n }\n\n /**\n * Возвращает строковое представление стоимости единицы товара (включая единицу измерения) в валюте. Если стоимость отсутствует, то вернёт '-'.\n */\n public getCostInCurrencyDescPerItem(): string {\n return this.costOne > 0 ? `${this.costOne.toLocaleString()} ${this.currency} / ${this.product.quantityUnit}` : '-';\n }\n\n /**\n * Возвращает строковое представление стоимости единицы товара (включая единицу измерения) в рублях. Если стоимость отсутствует, то вернёт '-'.\n */\n public getCostInRubDescPerItem(): string {\n return this.costOneRub > 0 ? `${this.costOneRub.toLocaleString()} ₽ / ${this.product.quantityUnit}` : '-';\n }\n\n /**\n * Возвращает стоимость товара в виде строки. Если стоимость отсутствует, то вернёт '-'.\n */\n public getCostRubStr(): string {\n return this.costRub > 0 ? `${this.costRub.toLocaleString()} ₽` : '-';\n }\n\n /**\n * Возвращает сообщение о необходимости уточнить цену или пустую строку.\n */\n public getCostMessage(): string {\n return this.costRub === 0 ? 'Цена требует уточнения' : '';\n }\n}\n","import { ScSum } from '../classes';\nimport { ScICartDTO } from '../internal';\nimport { ScCartItem } from './sc-cart-item';\n\n/**\n * Модель данных информация о содержимом корзины.\n */\nexport class ScCart {\n /**\n * Список позиций товаров/услуг в корзине.\n */\n public items: ScCartItem[];\n\n /**\n * Итоговая стоимость корзины в рублях.\n */\n public resultSum: ScSum;\n\n /**\n * Список итоговых сумм по направлениям продаж.\n */\n public directionsSum: Record<number, ScSum>;\n\n /**\n * Инициализирует экземпляр класса {@link ScCart}.\n *\n * @param cartDTO DTO с информацией о содержимом корзины.\n */\n // eslint-disable-next-line unicorn/no-object-as-default-parameter\n public constructor(cartDTO: ScICartDTO = { items: [], resultSum: { rub: 0 }, directionsSum: {} }) {\n this.items = cartDTO.items.map((item) => new ScCartItem(item));\n this.resultSum = cartDTO.resultSum;\n this.directionsSum = cartDTO.directionsSum;\n }\n}\n","import { ScISalesDirection } from '../../references';\nimport { ScSum } from '../classes';\nimport { ScCartItem } from './sc-cart-item';\n\n/**\n * Корзина по направлению продаж.\n */\nexport class ScISalesDirectionCart {\n /**\n * Данные о направлении продаж.\n */\n public salesDirection: ScISalesDirection;\n\n /**\n * Список позиций товаров/услуг в корзине по направлению продаж.\n */\n public items: ScCartItem[];\n\n /**\n * Список позиций товаров/услуг в корзине по направлению продаж, которые идут \"под заказ\".\n */\n public itemsOnOrder: ScCartItem[];\n\n /**\n * Список позиций товаров/услуг в корзине по направлению продаж, которые отсутствуют в наличии.\n */\n public itemsNotInWarehouseStock: ScCartItem[];\n\n /**\n * Итоговая сумма по направлению продаж.\n */\n public directionSum: ScSum;\n\n /**\n * Инициализирует экземпляр класса {@link ScISalesDirectionCart}.\n *\n * @param salesDirection Данные о направлении продаж.\n * @param items Список позиций товаров/услуг в корзине.\n * @param directionSum Данные итоговой суммы.\n * @param warehouseId Идентификатор выбранного склада.\n */\n public constructor(salesDirection: ScISalesDirection, items: ScCartItem[], directionSum: ScSum, warehouseId: number) {\n this.salesDirection = salesDirection;\n this.items = items.filter((item) => item.product.isWarehouseStockExist(warehouseId) && !item.product.onOrder);\n this.itemsOnOrder = items.filter((item) => item.product.onOrder);\n this.itemsNotInWarehouseStock = items.filter((item) => !item.product.isWarehouseStockExist(warehouseId) && !item.product.onOrder);\n this.directionSum = directionSum;\n }\n}\n","/* eslint-disable security/detect-object-injection,no-param-reassign */\n\nimport { HttpParams } from '@angular/common/http';\nimport { Inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { tuiCleanObject } from '@taiga-ui/addon-doc/utils';\n\nimport { ScDateToString } from '../types';\n\n/**\n * Сервис конвертации данных.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScConvertersService {\n /**\n * Инициализирует экземпляр класса {@link ScConvertersService}.\n *\n * @param locale Язык приложения из поставщика.\n */\n public constructor(@Inject(LOCALE_ID) private readonly locale: string) {}\n\n /**\n * Конвертирует объект в {@link HttpParams}.\n *\n * @param object Объект, которые нужно перевести в {@link HttpParams}.\n * @param options Параметры конвертации объекта.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public toHttpParams(object: Record<string, any>, options?: Partial<{ minLength: number; nonNullable: boolean }>): HttpParams {\n object = this.toSimpleObjectRecursive(object);\n object = this.convertDateToString(object);\n\n if (options?.nonNullable) {\n object = tuiCleanObject(object);\n }\n\n if (options?.minLength) {\n object = this.removeByStrLength(object, options.minLength);\n }\n\n return new HttpParams().appendAll(object);\n }\n\n /**\n * Возвращает {@link T} объект из которого удалены свойства со значением null.\n *\n * @param object Объект, в котором необходимо удалить свойства со значением null.\n */\n // eslint-disable-next-line class-methods-use-this\n public removeNull<T extends object>(object: T): T {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return Object.fromEntries(Object.entries(object).filter(([_, v]) => v !== null && v !== '')) as T;\n }\n\n /**\n * Возвращает {@link T} объект из которого рекурсивно удалены свойства со значением null.\n *\n * @param object Объект, в котором необходимо удалить свойства со значением null.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public removeNullRecursive<T extends Record<string, any>>(object: T): T {\n // eslint-disable-next-line no-restricted-syntax\n for (const k of Object.keys(object)) {\n if (object[k] === null) {\n if (Array.isArray(object)) {\n object.splice(+k, 1);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete object[k];\n }\n this.removeNullRecursive(object);\n } else if (typeof object[k] === 'object') {\n this.removeNullRecursive(object[k]);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (Array.isArray(object) && Object.keys(object[k] as Record<string, any>).length === 0) {\n object.splice(+k, 1);\n }\n }\n }\n return object;\n }\n\n /**\n * Возвращает {@link T} объект из которого удалены свойства меньшей длины, чем {@link minLength}.\n *\n * @param object ООбъект, в котором необходимо удалить свойства меньшей длины, чем {@link minLength}.\n * @param minLength Минимально допустимая длина строковых свойств объекта.\n */\n // eslint-disable-next-line class-methods-use-this\n public removeByStrLength<T extends object>(object: T, minLength: number): T {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return Object.fromEntries(Object.entries(object).filter(([_, v]) => (typeof v === 'string' && v.length > minLength) || typeof v !== 'string')) as T;\n }\n\n /**\n * Конвертирует поля, имеющие тип {@link Date}, в {@link object}, и возвращает как новый объект.\n *\n * @param object Объект, в котором необходимо преобразовать поля Date в string.\n */\n public convertDateToString<T extends object>(object: T): ScDateToString<T> {\n return Object.fromEntries(Object.entries(object).map(([_, v]) => (v instanceof Date ? [_, v.toLocaleDateString(this.locale)] : [_, v]))) as ScDateToString<T>;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private createParamKeyString(keys: string[]): string {\n // eslint-disable-next-line unicorn/no-array-reduce\n return keys.reduce((result, current, index) => (index === 0 ? current : `${result}[${current}]`), '');\n }\n\n /**\n * Возвращает новое представление объекта в котором рекурсивно поля преобразованы в формат <patent_properties>[<child_properties>]... .\n *\n * @param object Объект, в котором необходимо преобразовать поля в формат <patent_properties>[<child_properties>]... .\n * @param keys Список ключей до объекта {@link object} в исходном объекте.\n * @param resultObject Итоговый объект.\n */\n public toSimpleObjectRecursive(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object: Record<string, any>,\n keys: string[] = [],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resultObject: Record<string, any> = {}\n ): Record<string, string | number | boolean | Date | null> {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in object) {\n // eslint-disable-next-line sonarjs/no-useless-call\n if (object.hasOwnProperty.call(object, key)) {\n if (typeof object[key] === 'object' && object[key] !== null && !(object[key] instanceof Date)) {\n this.toSimpleObjectRecursive(object[key] as object, [...keys, key], resultObject);\n } else {\n resultObject[this.createParamKeyString([...keys, key])] = object[key] as string | number | boolean | Date | null;\n }\n }\n }\n\n return resultObject;\n }\n}\n","/**\n * Формат отображения каталога.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScCatalogFormat {\n /**\n * Отображение каталога в виде карточек.\n */\n normal = 'normal',\n\n /**\n * Отображение каталога в виде раскрывающегося древовидного списка.\n */\n tree = 'tree',\n}\n","/**\n * Перечисление представления вида плиток товаров.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScProductTileType {\n /**\n * Сетка из вертикальных плиток товаров.\n */\n grid = 'grid',\n\n /**\n * Товары в виде строк, во всю ширину блока.\n */\n lines = 'lines',\n}\n","import { ScCatalogFormat } from '../../catalog/enums/sc-catalog-format';\nimport { ScProductTileType } from '../../catalog/enums/sc-product-tile-type';\nimport { ScINewOrder } from '../../order/dto/sc-i-new-order';\n\n/**\n * Метаданные пользователя.\n */\nexport class ScUserMetadata {\n /**\n * Название свойства и его значение.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n\n /**\n * Список идентификаторов категорий, которые необходимо скрыть в каталоге.\n */\n public hiddenCategories: Array<number | string> = [];\n\n /**\n * Вид отображения плиток товаров.\n */\n public productTileType: ScProductTileType = ScProductTileType.grid;\n\n /**\n * Количество элементов на странице пагинации.\n */\n public paginatePageSize?: number;\n\n /**\n * Метаданные не оформленных заказов.\n */\n public newOrdersMetadata: Record<number, ScINewOrder | undefined> = [];\n\n /**\n * Дата последнего открытия опросников.\n */\n public lastOpenQuestionnaireTime?: number;\n\n /**\n * Формат отображения каталога.\n */\n public catalogFormat: ScCatalogFormat = ScCatalogFormat.normal;\n\n /**\n * Идентификатор выбранного склада.\n */\n public selectedWarehouseId?: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScUserMetadata}.\n *\n * @param data Данные для первоначальной инициализации объекта.\n */\n public constructor(data: Partial<ScUserMetadata> = {}) {\n Object.assign(this, data);\n }\n}\n","/**\n * Перечисление названий справочников.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScReferenceName {\n /**\n * Тип канала сообщений чата.\n */\n chatChannel = 'chat-channel',\n\n /**\n * Город.\n */\n city = 'city',\n\n /**\n * Город с информацией о регионе и стране.\n */\n cityWithRegionAndCountry = 'city-with-region-and-country',\n\n /**\n * Город с информацией о регионе.\n */\n cityWithRegion = 'city-with-region',\n\n /**\n * Страна.\n */\n country = 'country',\n\n /**\n * Тип доставки.\n */\n deliveryType = 'delivery-type',\n\n /**\n * Статус оплаты заказа.\n */\n orderPaymentStatus = 'order-payment-status',\n\n /**\n * Статус заказа.\n */\n orderStatus = 'order-status',\n\n /**\n * Тип оплаты заказа.\n */\n paymentType = 'payment-type',\n\n /**\n * Статус рекламации.\n */\n reclamationStatus = 'reclamation-status',\n\n /**\n * Регион.\n */\n region = 'region',\n\n /**\n * Регион с информацией о стране.\n */\n regionWithCountry = 'region-with-country',\n\n /**\n * Направление продаж.\n */\n salesDirection = 'salesDirection',\n\n /**\n * Розничный магазин.\n */\n store = 'store',\n\n /**\n * Склад.\n */\n warehouse = 'warehouse',\n\n /**\n * ОПФ (организационно-правовая форма).\n */\n opf = 'opf',\n\n /**\n * Валюта.\n */\n currency = 'currency',\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, Observable, of, shareReplay, switchMap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { ScConvertersService } from '../../converters';\nimport { ScDeliveryType } from '../../order/enums/sc-delivery-type';\nimport { ScPaymentType } from '../../order/enums/sc-payment-type';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { SC_USER_INFO, ScClientType, ScUser } from '../../user';\nimport { ScICurrency, ScIReferencesTypes, ScISalesDirection } from '../dto';\nimport { ScOpfList } from '../enums/sc-opf-list';\nimport { ScOrderStateStatus } from '../enums/sc-order-state-status';\nimport { ScPaymentStatus } from '../enums/sc-payment-status';\nimport { ScReclamationStatus } from '../enums/sc-reclamation-status';\nimport { ScReferenceName } from '../enums/sc-reference-name';\n\n/**\n * Сервис справочников.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScReferencesService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * Список направлений продаж.\n */\n public directions$: Observable<ScISalesDirection[]> = this.getReference$<ScISalesDirection[]>(ScReferenceName.salesDirection);\n\n /**\n * Список типов доставки заказа.\n */\n public deliveryTypes$: Observable<Array<ScIReferencesTypes<ScDeliveryType, typeof ScDeliveryType>>> = this.getReference$<\n Array<ScIReferencesTypes<ScDeliveryType, typeof ScDeliveryType>>\n >(ScReferenceName.deliveryType);\n\n /**\n * Список статусов заказа.\n */\n public orderStatuses$: Observable<Array<ScIReferencesTypes<ScOrderStateStatus, typeof ScOrderStateStatus>>> = this.getReference$<\n Array<ScIReferencesTypes<ScOrderStateStatus, typeof ScOrderStateStatus>>\n >(ScReferenceName.orderStatus);\n\n /**\n * Список статусов оплаты заказа.\n */\n public paymentStatuses$: Observable<Array<ScIReferencesTypes<ScPaymentStatus, typeof ScPaymentStatus>>> = this.getReference$<\n Array<ScIReferencesTypes<ScPaymentStatus, typeof ScPaymentStatus>>\n >(ScReferenceName.orderPaymentStatus);\n\n /**\n * Список статусов рекламаций.\n */\n public reclamationStatuses$: Observable<Array<ScIReferencesTypes<ScReclamationStatus, typeof ScReclamationStatus>>> = this.getReference$<\n Array<ScIReferencesTypes<ScReclamationStatus, typeof ScReclamationStatus>>\n >(ScReferenceName.reclamationStatus);\n\n /**\n * Список организационно-правовых форм..\n */\n public opf$: Observable<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>> = this.getReference$<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>>(\n ScReferenceName.opf\n );\n\n /**\n * Список статусов заказа.\n */\n public currencies$: Observable<ScICurrency[]> = this.getReference$<ScICurrency[]>(ScReferenceName.currency);\n\n /**\n * Список типов контрагента.\n *\n * TODO: Заменить на справочники из API. Написать тесты после доработки справочников.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public clientTypes$: Observable<any[]> = of([\n { name: ScClientType.person, description: 'Физическое лицо' },\n { name: ScClientType.org, description: 'Юридическое лицо' },\n { name: ScClientType.ic, description: 'Индивидуальный предприниматель' },\n ]);\n\n /**\n * Список типов оплаты заказа.\n */\n public paymentTypes$: Observable<Array<ScIReferencesTypes<ScPaymentType, typeof ScPaymentType>>> = this.user$.pipe(\n switchMap(() => this.getReference$<Array<ScIReferencesTypes<ScPaymentType, typeof ScPaymentType>>>(ScReferenceName.paymentType)),\n shareReplay(1)\n );\n\n /**\n * Возвращает данные справочника.\n *\n * @param referenceName Название справочника.\n * @param params Дополнительные параметры запроса.\n * @param params.countryId Идентификатор страны.\n * @param params.regionId Идентификатор региона в стране.\n */\n public getReference$<T>(referenceName: ScReferenceName, params?: { countryId?: number; regionId?: number }): Observable<T> {\n return this.http\n .get<T>(`${this.urls.apiUrl}/references/${referenceName}`, { params: this.convertersService.toHttpParams({ params: params }, { nonNullable: true }) })\n .pipe(shareReplay(1));\n }\n\n /**\n * Возвращает данные справочника по идентификатору.\n *\n * @param referenceName Название справочника.\n * @param term Поисковый запрос.\n * @param params Дополнительные параметры запроса.\n * @param params.countryId Идентификатор страны.\n * @param params.regionId Идентификатор региона в стране.\n */\n public getReferenceByTerm$<T>(referenceName: ScReferenceName, term: string, params?: { countryId?: number; regionId?: number }): Observable<T> {\n return this.http\n .get<T>(`${this.urls.apiUrl}/references/${referenceName}/search`, {\n params: this.convertersService.toHttpParams({ term: term, params: params }, { nonNullable: true }),\n })\n .pipe(shareReplay(1));\n }\n\n /**\n * Возвращает данные справочника по идентификатору.\n *\n * @param referenceName Название справочника.\n * @param id Идентификатор записи справочника, информацию о которой необходимо вернуть.\n */\n public getReferenceById$<T>(referenceName: ScReferenceName, id: number): Observable<T> {\n return this.http.get<T>(`${this.urls.apiUrl}/references/${referenceName}/${id}`).pipe(shareReplay(1));\n }\n\n /**\n * Возвращает {@link Observable} направления продаж, соответствующий идентификатору на входе.\n *\n * @param directionId Идентификатор направления продаж.\n */\n public getDirectionById$(directionId: number): Observable<ScISalesDirection | undefined> {\n return this.directions$.pipe(map((directions) => directions.find((direction) => direction.id === directionId)));\n }\n\n /**\n * Возвращает {@link Observable} типа клиента, соответствующий символьному обозначению (slug) на входе.\n * TODO: Написать тесты после доработки справочников.\n *\n * @param slug Символьное обозначение (slug) типа клиента.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public getClientTypesBySlug$(slug: string): Observable<any> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return this.clientTypes$.pipe(map((types) => types.find((type) => type.name === slug)));\n }\n\n /**\n * Возвращает {@link Observable} статус оплаты, соответствующий идентификатору на входе.\n *\n * @param typeId Идентификатор статуса оплаты.\n */\n public getPaymentStatusById$(typeId: ScPaymentStatus): Observable<ScIReferencesTypes<ScPaymentStatus, typeof ScPaymentStatus> | undefined> {\n return this.paymentStatuses$.pipe(map((types) => types.find((type) => type.id === typeId)));\n }\n\n /**\n * Возвращает {@link Observable} тип доставки, соответствующий идентификатору на входе.\n *\n * @param typeId Идентификатор типа доставки.\n */\n public getDeliveryTypeById$(typeId: ScDeliveryType): Observable<ScIReferencesTypes<ScDeliveryType, typeof ScDeliveryType> | undefined> {\n return this.deliveryTypes$.pipe(map((types) => types.find((type) => type.id === typeId)));\n }\n\n /**\n * Возвращает {@link Observable} тип статуса заказа, соответствующий идентификатору на входе.\n *\n * @param statusId Идентификатор типа статуса.\n */\n public getOrderStatusById$(statusId: ScOrderStateStatus): Observable<ScIReferencesTypes<ScOrderStateStatus, typeof ScOrderStateStatus> | undefined> {\n return this.orderStatuses$.pipe(map((types) => types.find((type) => type.id === statusId)));\n }\n\n /**\n * Возвращает {@link Observable} типа статуса рекламаций, соответствующий указанному идентификатору.\n *\n * @param statusId Идентификатор типа статуса.\n */\n public getReclamationStatusById$(statusId: ScReclamationStatus): Observable<ScIReferencesTypes<ScReclamationStatus, typeof ScReclamationStatus> | undefined> {\n return this.reclamationStatuses$.pipe(map((types) => types.find((type) => type.id === statusId)));\n }\n\n /**\n * Возвращает {@link Observable} тип оплаты, соответствующий идентификатору на входе.\n *\n * @param typeId Идентификатор типа оплаты.\n */\n public getPaymentTypeById$(typeId: ScPaymentType): Observable<ScIReferencesTypes<ScPaymentType, typeof ScPaymentType> | undefined> {\n return this.paymentTypes$.pipe(map((types) => types.find((type) => type.id === typeId)));\n }\n\n /**\n * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.\n *\n * @param slug Символьное обозначение (slug).\n */\n public getOpfBySlug$(slug: keyof typeof ScOpfList): Observable<ScIReferencesTypes<ScOpfList, typeof ScOpfList> | undefined> {\n return this.opf$.pipe(map((types) => types.find((type) => type.slug === slug)));\n }\n\n /**\n * Возвращает {@link Observable} валюты, соответствующий идентификатору на входе.\n *\n * @param currencyId Идентификатор валюты.\n */\n public getCurrencyById$(currencyId: number): Observable<ScICurrency | undefined> {\n return this.currencies$.pipe(map((types) => types.find((type) => type.id === currencyId)));\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { distinctUntilKeyChanged, MonoTypeOperatorFunction, Observable } from 'rxjs';\n\nimport { ScUserMetadata } from '../../user';\n\n/**\n * Возвращает фильтр для {@link Observable} изменений метаданных пользователя.\n *\n * @param target Свойство для которого отслеживается изменение.\n * @returns Функция {@link distinctUntilKeyChanged} для отслеживания изменения {@link Observable} {@link ScUserMetadata}.\n */\nexport function filterChangedByKey(target: keyof ScUserMetadata): MonoTypeOperatorFunction<ScUserMetadata> {\n return distinctUntilKeyChanged(target, (previous, current) => previous === current);\n}\n","/* eslint-disable security/detect-object-injection */\n\nimport { Injectable } from '@angular/core';\nimport { distinctUntilChanged, first, map, Observable, ReplaySubject, skip, Subscription, switchMap } from 'rxjs';\n\nimport { ScCatalogFormat } from '../../catalog/enums/sc-catalog-format';\nimport { ScProductTileType } from '../../catalog/enums/sc-product-tile-type';\nimport { ScINewOrder } from '../../order/dto/sc-i-new-order';\nimport { ScUserMetadata } from '../../user/dto/sc-user-metadata';\nimport { ScUserType } from '../../user/enums/sc-user-type';\nimport { ScUserService } from '../../user/services/sc-user.service';\nimport { filterChangedByKey } from '../utils/filter-changed-by-key';\n\n/**\n * Сервис для работы с UI.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUIService {\n /**\n * {@link ReplaySubject} метаданных пользователя.\n */\n private readonly userMetadataSubject: ReplaySubject<ScUserMetadata> = new ReplaySubject<ScUserMetadata>(1);\n\n /**\n * Подписка на изменение метаданных пользователя.\n */\n private metadataSubjectSubscription?: Subscription;\n\n /**\n * Инициализирует экземпляр класса {@link ScUIService}.\n *\n * @param userService Сервис информации о пользователе.\n */\n public constructor(private readonly userService: ScUserService) {\n userService.getUserChange$().subscribe((user) => {\n if (this.metadataSubjectSubscription) {\n this.metadataSubjectSubscription.unsubscribe();\n }\n\n this.userMetadataSubject.next(new ScUserMetadata(user.metadata));\n\n this.metadataSubjectSubscription = this.userMetadataSubject\n .pipe(\n skip(1), // Не нужно обновлять данные пользователя при его смене.\n switchMap((metadata) =>\n user.userType === ScUserType.guest ? this.userService.updateGuestInfo$({ metadata: metadata }) : this.userService.updateUserInfo$({ metadata: metadata })\n )\n )\n .subscribe();\n });\n }\n\n /**\n * Возвращает {@link Observable} метаданных, когда изменяется значение переданного свойства.\n *\n * @param target Свойство для которого отслеживается изменение.\n */\n public getMetadataChangeByKey$<T extends keyof ScUserMetadata, R = ScUserMetadata[T]>(target: T): Observable<R> {\n return this.userMetadataSubject.pipe(\n filterChangedByKey(target),\n map((metadata) => metadata[target] as R)\n );\n }\n\n /**\n * Возвращает {@link Observable} метаданных, когда изменяется значение переданного свойства.\n * TODO: Доработать функцию, чтобы она возвращала Observable.\n *\n * @param target Свойство, значение которого необходимо изменить.\n * @param value Новое значение.\n */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n public setMetadataByKey<T extends keyof ScUserMetadata, V = ScUserMetadata[T]>(target: T, value: V): void {\n this.userMetadataSubject.pipe(first()).subscribe((metadata) => {\n const newMetadata = new ScUserMetadata(metadata);\n\n newMetadata[target] = value;\n this.userMetadataSubject.next(newMetadata);\n });\n }\n\n /**\n * Возвращает {@link Observable} списка категорий, которые необходимо скрыть.\n */\n public getHiddenCategoriesList$(): Observable<Array<number | string>> {\n return this.getMetadataChangeByKey$('hiddenCategories');\n }\n\n /**\n * Устанавливает список категорий, которые необходимо скрыть.\n *\n * @param categoryIds Список идентификаторов категорий, которые необходимо скрыть.\n */\n public setHiddenCategoriesList(categoryIds: Array<number | string>): void {\n this.setMetadataByKey('hiddenCategories', categoryIds);\n }\n\n /**\n * Возвращает {@link Observable} вида представления товара в списке.\n */\n public getProductTileType$(): Observable<ScProductTileType> {\n return this.getMetadataChangeByKey$('productTileType');\n }\n\n /**\n * Устанавливает вид представления товара в списке.\n *\n * @param productTileType Вид представления товара в списке.\n */\n public setProductTileType(productTileType: ScProductTileType): void {\n this.setMetadataByKey('productTileType', productTileType);\n }\n\n /**\n * Возвращает {@link Observable} количества элементов на странице пагинации.\n */\n public getPaginatePageSize$(): Observable<number | undefined> {\n return this.getMetadataChangeByKey$('paginatePageSize');\n }\n\n /**\n * Устанавливает количество элементов на странице пагинации.\n *\n * @param paginatePageSize Количество элементов на странице пагинации.\n */\n public setPaginatePageSize(paginatePageSize: number): void {\n this.setMetadataByKey('paginatePageSize', paginatePageSize);\n }\n\n /**\n * Возвращает {@link Observable} метаданных неоформленного заказа по направлению продаж.\n *\n * @param directionsId Идентификатор направления продаж.\n */\n public getNewOrderMetadata$(directionsId: number): Observable<ScINewOrder | undefined> {\n // Данные представлены массивом объектов, поэтому не используется getMetadataChangeByKey$().\n return this.userMetadataSubject.pipe(\n map((metadata) => metadata.newOrdersMetadata),\n distinctUntilChanged(),\n map((ordersMetadata: Record<number, ScINewOrder | undefined>) => ordersMetadata[directionsId]),\n distinctUntilChanged()\n );\n }\n\n /**\n * Устанавливает метаданные неоформленного заказа по направлению продаж.\n *\n * @param directionsId Идентификатор направления продаж.\n * @param newOrderMetadata Данные нового неоформленного заказа.\n */\n public setNewOrderMetadata(directionsId: number, newOrderMetadata: ScINewOrder): void {\n // При сохранении изображения выдаёт ошибку 500 'Произошла ошибка при работе с базой данных'.\n // TODO: TASK[#6370]: Доработать после решения задачи.\n if (newOrderMetadata.image) {\n // eslint-disable-next-line no-param-reassign\n delete newOrderMetadata.image;\n }\n\n this.getMetadataChangeByKey$('newOrdersMetadata')\n .pipe(first())\n .subscribe((ordersMetadata) => {\n // eslint-disable-next-line no-param-reassign\n ordersMetadata[directionsId] = newOrderMetadata;\n this.setMetadataByKey('newOrdersMetadata', structuredClone(ordersMetadata));\n });\n }\n\n /**\n * Удаляет метаданные неоформленного заказа по направлению продаж.\n *\n * @param directionsId Идентификатор направления продаж.\n */\n public removeNewOrderMetadata(directionsId: number): void {\n this.getMetadataChangeByKey$('newOrdersMetadata')\n .pipe(first())\n .subscribe((ordersMetadata) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete,no-param-reassign\n delete ordersMetadata[directionsId];\n this.setMetadataByKey('newOrdersMetadata', structuredClone(ordersMetadata));\n });\n }\n\n /**\n * Удаляет метаданные не оформленных заказов по всем направлениям продаж.\n */\n public removeAllNewOrdersMetadata(): void {\n this.setMetadataByKey('newOrdersMetadata', []);\n }\n\n /**\n * Возвращает дату последнего открытия опросников.\n */\n public getLastOpenQuestionnaireTime$(): Observable<number | undefined> {\n return this.getMetadataChangeByKey$('lastOpenQuestionnaireTime');\n }\n\n /**\n * Устанавливает дату последнего открытия опросников.\n *\n * @param lastOpenQuestionnaireTime Дата последнего открытия опросников.\n */\n public setLastOpenQuestionnaireTime(lastOpenQuestionnaireTime: number | undefined): void {\n this.setMetadataByKey('lastOpenQuestionnaireTime', lastOpenQuestionnaireTime);\n }\n\n /**\n * Возвращает формат отображения каталога.\n */\n public getCatalogFormat$(): Observable<ScCatalogFormat> {\n return this.getMetadataChangeByKey$('catalogFormat');\n }\n\n /**\n * Устанавливает формат отображения каталога.\n *\n * @param catalogFormat Формат отображения каталога.\n */\n public setCatalogFormat(catalogFormat: ScCatalogFormat): void {\n this.setMetadataByKey('catalogFormat', catalogFormat);\n }\n\n /**\n * Устанавливает идентификатор выбранного склада.\n *\n * @param selectedWarehouseId Идентификатор выбранного склада.\n */\n public setSelectedWarehouseId(selectedWarehouseId: number): void {\n this.setMetadataByKey('selectedWarehouseId', selectedWarehouseId);\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access,security/detect-non-literal-regexp */\n\nimport { inject, InjectionToken, Provider } from '@angular/core';\nimport { WA_USER_AGENT } from '@ng-web-apis/common';\n\nimport { ScITerminalProvider } from './interfaces';\n\n/**\n * Токен признака запущено ли приложение на терминале.\n */\nexport const IS_RUNNING_ON_TERMINAL: InjectionToken<ScITerminalProvider> = new InjectionToken<ScITerminalProvider>('IS_RUNNING_ON_TERMINAL');\n\n/**\n * Возвращает признак, что приложение запущено на терминале, а также код склада который обслуживает этот терминал (вернет null если не идентификатор склада отсутствует).\n *\n * @param userAgentTerminal Регулярное выражение агента пользователя для терминала.\n *\n * @returns Если приложение запущено на терминале, возвращает признак этого\n * и возвращает идентификатор склада привязанного к терминалу в случае его извлечения и, null в случае если склад не удалось извлечь.\n */\nexport function runningOnTerminalFactory(userAgentTerminal: RegExp): ScITerminalProvider {\n const isRunningOnTerminal = userAgentTerminal.test(inject(WA_USER_AGENT));\n\n if (isRunningOnTerminal) {\n const matchResult = new RegExp(`${userAgentTerminal.source}(\\\\w+)`, 'i').exec(inject(WA_USER_AGENT));\n\n if (matchResult && matchResult.length > 1) {\n return { isRunningOnTerminal: isRunningOnTerminal, warehouseId: Number.parseInt(matchResult[1], 10) };\n }\n }\n\n return { isRunningOnTerminal: isRunningOnTerminal, warehouseId: null };\n}\n\n/**\n * Токен агента пользователя для терминала.\n */\nexport const USER_AGENT_TERMINAL: InjectionToken<RegExp> = new InjectionToken<RegExp>('USER_AGENT_TERMINAL', {\n providedIn: 'root',\n factory: () => /sc_terminal_w/i,\n});\n\n/**\n * Провайдеры данных о терминале.\n */\nexport const TERMINAL_PROVIDERS: Provider[] = [\n {\n provide: IS_RUNNING_ON_TERMINAL,\n deps: [USER_AGENT_TERMINAL],\n useFactory: runningOnTerminalFactory,\n },\n];\n","import { inject, Injectable } from '@angular/core';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { BehaviorSubject, distinctUntilChanged, filter, map, Observable, shareReplay, skip, switchMap, tap } from 'rxjs';\n\nimport { ScITerminalProvider } from '../../providers/interfaces/sc-i-terminal-provider';\nimport { IS_RUNNING_ON_TERMINAL } from '../../providers/terminal.providers';\nimport { ScReferenceName } from '../../references/enums/sc-reference-name';\nimport { ScReferencesService } from '../../references/services/sc-references.service';\nimport { SC_USER_INFO, ScUser } from '../../user';\nimport { ScIWarehouse } from '../dto';\n\n/**\n * Сервис для работы со складами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScWarehouseService {\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * {@link ScITerminalProvider} данных о терминале.\n */\n private readonly terminal: ScITerminalProvider = inject(IS_RUNNING_ON_TERMINAL);\n\n /**\n * Список складов.\n */\n private warehouses$: Observable<ScIWarehouse[]> = inject(ScReferencesService).getReference$<ScIWarehouse[]>(ScReferenceName.warehouse).pipe(shareReplay(1));\n\n /**\n * {@link BehaviorSubject} идентификатора выбранного склада.\n */\n private warehouseIdSelectSubject: BehaviorSubject<number | null> = new BehaviorSubject<number | null>(null);\n\n /**\n * Инициализирует экземпляр класса {@link ScWarehouseService}.\n */\n public constructor() {\n this.initSubscriptionOnUser();\n }\n\n /**\n * Инициализирует подписки на изменения пользователя.\n */\n private initSubscriptionOnUser(): void {\n // Observable данных для обработки сигналов изменения пользователя.\n const data$ = this.warehouses$.pipe(\n switchMap((warehouses) =>\n this.user$.pipe(\n map((user) => ({\n warehouses: warehouses,\n selectedIdMetadata: user.metadata.selectedWarehouseId,\n city: user.city,\n region: user.region,\n id: user.id,\n }))\n )\n )\n );\n\n // При входе и выходе устанавливает Id склада, записанный в metadata, либо Id склада соответствующий региону пользователя, либо Id склада умолчанию.\n data$\n .pipe(\n // eslint-disable-next-line unicorn/no-negation-in-equality-check\n distinctUntilChanged((previous, current) => !previous.id === !current.id),\n map((data) => /** data.selectedIdMetadata || */ data.warehouses.find((warehouse) => data.region && warehouse.regions?.includes(data.region))?.id ?? null),\n filter((selectedId) => this.warehouseIdSelectSubject.value !== selectedId),\n tap((selectedId) => {\n this.warehouseIdSelectSubject.next(selectedId);\n })\n )\n .subscribe();\n\n // При смене региона устанавливает в metadata id склада выбранного региона, либо ставит Id склада по умолчанию, если регион был удалён.\n data$\n .pipe(\n // eslint-disable-next-line unicorn/no-negation-in-equality-check\n distinctUntilChanged((previous, current) => !previous.id !== !current.id || previous.city === current.city),\n skip(1), // distinctUntilChanged() всегда выдаёт первое значение, поэтому пропускаем его и реагируем только на изменение.\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing,sonarjs/prefer-nullish-coalescing\n map((data) => data.warehouses.find((warehouse) => data.region && warehouse.regions?.includes(data.region))?.id || data.warehouses.find((item) => item.isMain)?.id),\n filter((selectedId) => selectedId !== undefined && this.warehouseIdSelectSubject.value !== selectedId),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n map((selectedId) => selectedId!),\n tap((selectedId) => {\n this.setWarehouseIdSelectChange(selectedId);\n })\n )\n .subscribe();\n }\n\n /**\n * Устанавливает идентификатор выбранного склада в {@link BehaviorSubject}.\n *\n * @param warehouseId Идентификатор выбранного склада.\n */\n public setWarehouseIdSelectChange(warehouseId: number): void {\n this.warehouseIdSelectSubject.next(warehouseId);\n\n // this.uiService.setSelectedWarehouseId(warehouseId);\n }\n\n /**\n * Возвращает {@link Observable} выбранного склада.\n */\n public getWarehouseSelectChange$(): Observable<ScIWarehouse> {\n return this.warehouses$.pipe(\n switchMap((warehouses) =>\n this.warehouseIdSelectSubject.pipe(\n map((id) => warehouses.find((item) => item.id === id) ?? warehouses.find((item) => item.isMain)),\n filter((warehouse) => warehouse !== undefined)\n )\n ),\n map((warehouse) => warehouse)\n );\n }\n\n /**\n * Возвращает {@link Observable} склада для доставки.\n */\n public getDeliveryWarehouse$(): Observable<ScIWarehouse> {\n return this.warehouses$.pipe(\n map((warehouses) => warehouses.find((item) => item.isMain)),\n filter(tuiIsPresent)\n );\n }\n\n /**\n * Возвращает {@link Observable} склада в зависимости от того, где запущено приложение.\n *\n * @returns Если приложение запущено на терминале и идентификатор склада привязанного к терминалу не null, то возвращает склад терминала,\n * во всех остальных случаях возвращает основной склад.\n */\n public getCatalogWarehouseChange$(): Observable<ScIWarehouse> {\n return this.warehouses$.pipe(\n map((warehouses) => warehouses.find((w) => w.id === this.terminal.warehouseId) ?? warehouses.find((w) => w.isMain)),\n filter(tuiIsPresent)\n );\n }\n\n /**\n * Возвращает {@link Observable} списка складов.\n */\n public getWarehouses$(): Observable<ScIWarehouse[]> {\n return this.warehouses$;\n }\n\n /**\n * Возвращает идентификатор выбранного склада.\n */\n public getCurrentWarehouseIdSelect(): number | null {\n return this.warehouseIdSelectSubject.getValue();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, Observable, ReplaySubject, switchMap, tap } from 'rxjs';\n\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScUploadedFile } from '../../contacts/dto/sc-uploaded-file';\nimport { ScOrder } from '../../order/dto/sc-order';\nimport { IS_BROWSER } from '../../providers/ssr.providers';\nimport { ScReferencesService } from '../../references/services/sc-references.service';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUIService } from '../../ui/services/sc-ui.service';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScWarehouseService } from '../../warehouse';\nimport { ScSum } from '../classes/sc-sum';\nimport { ScCart } from '../dto/sc-cart';\nimport { ScCartItem } from '../dto/sc-cart-item';\nimport { ScINewCartItemBase } from '../dto/sc-i-new-cart-item-base';\nimport { ScISalesDirectionCart } from '../dto/sc-i-sales-direction-cart';\nimport { ScICartDTO } from '../internal/sc-i-cart-dto';\n\n/**\n * Сервис для работы с корзиной.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScCartService {\n /**\n * {@link ReplaySubject} для содержимого корзины.\n */\n private readonly cart$: ReplaySubject<ScCart> = new ReplaySubject<ScCart>(1);\n\n /**\n * {@link Observable} содержимого корзины по направлениям продаж.\n */\n private readonly cartDirections$: Observable<ScISalesDirectionCart[]>;\n\n /**\n * Признак, что скрипт выполняется в браузере.\n */\n private readonly isBrowser: boolean = inject(IS_BROWSER);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис для работы с UI.\n */\n private readonly uiService: ScUIService = inject(ScUIService);\n\n /**\n * Сервис для работы со складами.\n */\n private readonly warehouseService: ScWarehouseService = inject(ScWarehouseService);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Инициализирует экземпляр класса {@link ScCartService}.\n *\n */\n public constructor() {\n if (this.isBrowser) {\n this.user$.pipe(switchMap(() => this.updateCart$())).subscribe((cart) => {\n this.cart$.next(cart);\n });\n } else {\n this.cart$.next(new ScCart());\n }\n\n this.cartDirections$ = inject(ScReferencesService).directions$.pipe(\n switchMap((directions) =>\n this.cart$.pipe(\n switchMap((cart) =>\n this.warehouseService.getWarehouseSelectChange$().pipe(\n map((warehouse) =>\n directions\n .map(\n (direction) =>\n new ScISalesDirectionCart(\n direction,\n cart.items.filter((cartItem) => !cartItem.product.isNull && !cartItem.product.isHidden && cartItem.salesDirection === direction.id),\n cart.directionsSum[direction.id],\n warehouse.id\n )\n )\n .filter((direction) => direction.items.length > 0 || direction.itemsOnOrder.length > 0 || direction.itemsNotInWarehouseStock.length > 0)\n )\n )\n )\n )\n )\n );\n }\n\n /**\n * Возвращает {@link Observable} содержимого корзины.\n */\n public getCartChange$(): Observable<ScCart> {\n return this.cart$.asObservable();\n }\n\n /**\n * Создаёт запрос получения содержимого корзины и обновляет корзину, возвращая {@link Observable} содержимого корзины.\n */\n public updateCart$(): Observable<ScCart> {\n return this.http.get<ScICartDTO>(`${this.urls.apiUrl}/cart`).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap((cart) => {\n this.cart$.next(cart);\n })\n );\n }\n\n /**\n * Создаёт запрос добавления товара в корзину и возвращает {@link Observable} содержимого корзины.\n *\n * @param cartNewItem Новый элемент корзины.\n */\n public addToCart$(cartNewItem: ScINewCartItemBase): Observable<ScCart> {\n return this.http.patch<ScICartDTO>(`${this.urls.apiUrl}/cart`, cartNewItem).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartItemAdded,\n params: { product_id: cartNewItem.productId },\n });\n }),\n tap((cart) => {\n this.cart$.next(cart);\n })\n );\n }\n\n /**\n * Создаёт запрос обновления позиции в корзине и возвращает {@link Observable} содержимого корзины.\n *\n * @param cartItemId Идентификатор элемента корзины.\n * @param cartPatchItem Новые данные элемента корзины.\n */\n public patchCartItem$(cartItemId: number, cartPatchItem: Omit<ScINewCartItemBase, 'productId'>): Observable<ScCart> {\n return this.http.patch<ScICartDTO>(`${this.urls.apiUrl}/cart/${cartItemId}`, cartPatchItem).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap((cart) => {\n this.cart$.next(cart);\n })\n );\n }\n\n /**\n * Создаёт запрос удаления позиции из корзины и возвращает {@link Observable} содержимого корзины.\n *\n * @param cartItem Запись корзины, которую необходимо удалить.\n */\n public deleteCartItem$(cartItem: ScCartItem): Observable<ScCart> {\n return this.http.delete<ScICartDTO>(`${this.urls.apiUrl}/cart/${cartItem.id}`).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartItemDeleted,\n params: { product_id: cartItem.product.id },\n });\n }),\n tap((cart) => {\n this.cart$.next(cart);\n })\n );\n }\n\n /**\n * Создаёт запрос очистки корзины.\n */\n public clearCart$(): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/cart`).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartCleared,\n });\n }),\n tap(() => {\n this.uiService.removeAllNewOrdersMetadata();\n this.cart$.next(new ScCart());\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} содержимого корзины по направлениям продаж.\n */\n public getCartDirectionsChange$(): Observable<ScISalesDirectionCart[]> {\n return this.cartDirections$;\n }\n\n /**\n * Возвращает {@link Observable} позиций в корзине с товарами, которые были удалены из прайс-лита и больше не продаются.\n */\n public getNullCartItems$(): Observable<ScCartItem[]> {\n return this.getCartChange$().pipe(map((cart) => cart.items.filter((item) => item.product.isNull || item.product.isHidden)));\n }\n\n /**\n * Возвращает объект {@link ScCart} корзины, созданный из объекта заказа.\n *\n * @param order Данные о заказе.\n */\n // eslint-disable-next-line class-methods-use-this\n public getCartByOrder(order: ScOrder): ScCart {\n return {\n items: order.products ?? [],\n resultSum: { rub: order.sum },\n directionsSum: { [order.direction]: new ScSum(order.sum) },\n } as ScCart;\n }\n\n /**\n * Возвращает пример CSV файла для добавления продуктов в корзину.\n */\n public getCartCsvExample$(): Observable<Blob> {\n return this.http\n .get(`${this.urls.apiUrl}/cart/csv/example`, {\n responseType: 'blob',\n })\n .pipe(map((blob) => new Blob([blob], { type: 'text/csv' })));\n }\n\n /**\n * Добавляет товары в корзину из файла CSV.\n *\n * @param file Загружаемый файл в формате base64.\n */\n public addProductsFromCsv$(file: ScUploadedFile): Observable<ScCart> {\n return this.http.post<ScICartDTO>(`${this.urls.apiUrl}/cart/csv`, { file }).pipe(\n map((cartDTO) => new ScCart(cartDTO)),\n tap((cart) => {\n this.cart$.next(cart);\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartCsvUpload,\n });\n })\n );\n }\n}\n","/* eslint-disable @typescript-eslint/no-duplicate-enum-values */\n\n/**\n * Перечисление MIME-типов.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScMimeTypes {\n aac = 'audio/aac',\n abw = 'application/x-abiword',\n arc = 'application/x-freearc',\n avi = 'video/x-msvideo',\n azw = 'application/vnd.amazon.ebook',\n bin = 'application/octet-stream',\n bmp = 'image/bmp',\n bz = 'application/x-bzip',\n bz2 = 'application/x-bzip2',\n csh = 'application/x-csh',\n css = 'text/css',\n csv = 'text/csv',\n document_ = 'application/msword',\n docx = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n eot = 'application/vnd.ms-fontobject',\n epub = 'application/epub+zip',\n gz = 'application/gzip',\n gif = 'image/gif',\n htm = 'text/html',\n html = 'text/html',\n ico = 'image/vnd.microsoft.icon',\n ics = 'text/calendar',\n jar = 'application/java-archive',\n jpeg = 'jpg',\n js = 'text/javascript',\n json = 'application/json',\n jsonld = 'application/ld+json',\n mid = 'midi',\n mjs = 'text/javascript',\n mp3 = 'audio/mpeg',\n mpeg = 'video/mpeg',\n mpkg = 'application/vnd.apple.installer+xml',\n odp = 'application/vnd.oasis.opendocument.presentation',\n ods = 'application/vnd.oasis.opendocument.spreadsheet',\n odt = 'application/vnd.oasis.opendocument.text',\n oga = 'audio/ogg',\n ogv = 'video/ogg',\n ogx = 'application/ogg',\n opus = 'audio/opus',\n otf = 'font/otf',\n png = 'image/png',\n pdf = 'application/pdf',\n php = 'application/php',\n ppt = 'application/vnd.ms-powerpoint',\n pptx = 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n rar = 'application/vnd.rar',\n rtf = 'application/rtf',\n sh = 'application/x-sh',\n svg = 'image/svg+xml',\n swf = 'application/x-shockwave-flash',\n tar = 'application/x-tar',\n tif = 'image/tiff',\n tiff = 'image/tiff',\n ts = 'video/mp2t',\n ttf = 'font/ttf',\n txt = 'text/plain',\n vsd = 'application/vnd.visio',\n wav = 'audio/wav',\n weba = 'audio/webm',\n webm = 'video/webm',\n webp = 'image/webp',\n woff = 'font/woff',\n woff2 = 'font/woff2',\n xhtml = 'application/xhtml+xml',\n xls = 'application/vnd.ms-excel',\n xlsx = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n xml = 'XML',\n xul = 'application/vnd.mozilla.xul+xml',\n zip = 'application/zip',\n '3gp' = 'video/3gpp',\n '3g2' = 'video/3gpp2',\n '7z' = 'application/x-7z-compressed',\n}\n","/**\n * Модель закэшированных данных.\n */\nexport class ScCachedData<T> {\n /**\n * Время загрузки данных.\n */\n public loadedAt: Date;\n\n /**\n * Кэшируемые данные.\n */\n public data: T;\n\n /**\n * Инициализирует экземпляр класса {@link ScCachedData}.\n *\n * @param data данные, которые необходимо закэшировать.\n */\n public constructor(data: T) {\n this.loadedAt = new Date();\n this.data = data;\n }\n\n /**\n * Возвращает признак того, что кэшированные данные актуальны.\n *\n * @param lifeTime Срок жизни данных в ms.\n */\n public cachedDataIsActual(lifeTime: number): boolean {\n return this.loadedAt.getTime() > Date.now() - lifeTime;\n }\n}\n","import { BehaviorSubject, Observable, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\n/**\n * Модель кэшированных данных.\n */\nexport class ScCachedItem<T> {\n /**\n * Время, до которого данные кэшированы в ms.\n */\n private cachedUntil?: number;\n\n /**\n * {@link Observable} обновления данных.\n */\n public readonly update$: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);\n\n /**\n * {@link Observable} изменения кэшируемых данных.\n */\n public readonly item$: Observable<T | null>;\n\n /**\n * Инициализирует экземпляр класса {@link ScCachedItem}.\n *\n * @param lifeTime Время жизни записи в ms.\n * @param item$ {@link Observable} запроса кэшируемых данных.\n */\n public constructor(lifeTime: number, item$: Observable<T | null>) {\n this.item$ = this.update$.pipe(\n switchMap(() =>\n item$.pipe(\n tap(() => {\n this.cachedUntil = Date.now() + lifeTime;\n }),\n startWith(null)\n )\n ),\n shareReplay(1)\n );\n }\n\n /**\n * Возвращает признак того, что кэшированные данные актуальны.\n */\n public cachedDataIsActual(): boolean {\n return !this.cachedUntil || this.cachedUntil > Date.now();\n }\n\n /**\n * Выполняет обновления {@link Observable} запроса кэшируемых данных.\n */\n public update(): void {\n this.cachedUntil = undefined;\n this.update$.next();\n }\n}\n","import { ScIVirtualCategoryDTO } from '../internal/sc-i-virtual-category-dto';\nimport { ScCategory } from './sc-category';\nimport { ScIProperties } from './sc-i-properties';\nimport { ScProduct } from './sc-product';\nimport { ScSeoResource } from './sc-seo-resource';\n\n/**\n * Данные о виртуальной категории.\n */\nexport class ScVirtualCategory extends ScSeoResource implements ScIVirtualCategoryDTO {\n /**\n * Название категории.\n */\n public name: string;\n\n /**\n * Символьный идентификатор виртуальной категории.\n */\n public slug: string;\n\n /**\n * Список свойств. Число свойств в объекте не ограничено.\n */\n public properties?: ScIProperties;\n\n /**\n * Данные о родительской виртуальной категории.\n */\n // eslint-disable-next-line no-use-before-define\n public parentCategory?: ScVirtualCategory;\n\n /**\n * Список дочерних виртуальных категорий.\n */\n // eslint-disable-next-line no-use-before-define\n public childCategories?: ScVirtualCategory[];\n\n /**\n * Список продуктов привязанных к виртуальной категории.\n */\n public products?: ScProduct[];\n\n /**\n * Список категорий продуктов привязанных к виртуальной категории.\n */\n public productCategories?: ScCategory[];\n\n /**\n * Инициализирует экземпляр класса {@link ScVirtualCategory}.\n *\n * @param virtualCategoryDTO Данные о виртуальной категории.\n */\n public constructor(virtualCategoryDTO: ScIVirtualCategoryDTO) {\n super(virtualCategoryDTO);\n\n this.name = virtualCategoryDTO.name;\n this.slug = virtualCategoryDTO.slug;\n this.properties = virtualCategoryDTO.properties;\n this.image = virtualCategoryDTO.properties?.image;\n this.parentCategory = virtualCategoryDTO.parentCategory ? new ScVirtualCategory(virtualCategoryDTO.parentCategory) : undefined;\n this.childCategories = virtualCategoryDTO.childCategories?.map((item) => new ScVirtualCategory(item));\n this.products = virtualCategoryDTO.products?.map((item) => new ScProduct(item));\n this.productCategories = virtualCategoryDTO.productCategories?.map((item) => new ScCategory(item));\n }\n}\n","/* TODO: Вынести в internal после переноса в библиотеку CatalogService - TASK[#6433], FavoriteService - TASK[#6435] */\n\nimport { ScIConfiguratorSearchProductBase } from '../../configurator/dto/sc-i-configurator-search-product-base';\nimport { ScIProperties } from '../dto/sc-i-properties';\nimport { ScISeoResourceDTO } from './sc-i-seo-resource-dto';\n\n/**\n * Модель данных категории товаров DTO.\n */\nexport interface ScICategoryDTO extends ScISeoResourceDTO {\n /**\n * Идентификатор категории.\n */\n id: number;\n\n /**\n * Символьное обозначение (slug) категории.\n */\n slug: string;\n\n /**\n * Название категории.\n */\n name: string;\n\n /**\n * Признак того, что категория является основной для некоторого товара или услуги.\n */\n isPrimary?: boolean;\n\n /**\n * Признак, что категория являются избранной для клиента.\n */\n isFavorite?: boolean;\n\n /**\n * Список свойств. Число свойств в объекте не ограничено.\n */\n properties?: ScIProperties;\n\n /**\n * Объект родительской категории.\n */\n parentCategory?: ScICategoryDTO;\n\n /**\n * Список дочерних категорий.\n */\n categories?: ScICategoryDTO[];\n\n /**\n * Признак наличия дочерних категорий.\n */\n hasChild?: boolean;\n\n /**\n * Параметры введенные в конфигуратор, при добавлении позиции в корзину.\n */\n configuratorParams?: ScIConfiguratorSearchProductBase;\n}\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен, указывающий число первых записей товаров со скидкой.\n */\nexport const SC_COUNT_FIRST_DISCOUNTED_PRODUCTS: InjectionToken<number> = tuiCreateToken(10);\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен определяющий, идентификатор или символьное обозначение (slug) используется для роутинга и маршрутизации.\n */\nexport const SC_ID_OR_SLUG_IN_ROUTE: InjectionToken<'id' | 'slug'> = tuiCreateToken<'id' | 'slug'>('id');\n","import { inject, Injectable, Pipe, PipeTransform } from '@angular/core';\n\nimport { SC_ID_OR_SLUG_IN_ROUTE } from '../providers/sc-id-or-slug-in-route';\n\n/**\n * Пайп, возвращающий идентификатор или символьное обозначение (slug) исходя из настроек окружения\n */\n@Pipe({\n name: 'scIdOrSlug',\n standalone: true,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ScIdOrSlugPipe implements PipeTransform {\n /**\n * Признак определяющий, идентификатор или символьное обозначение (slug) используется для роутинга и маршрутизации.\n */\n readonly idOrSlug: 'id' | 'slug' = inject<'id' | 'slug'>(SC_ID_OR_SLUG_IN_ROUTE);\n\n /**\n * Возвращает идентификатор или символьное обозначение (slug) исходя из настроек окружения.\n *\n * @param value Объект содержащий идентификатор и символьное обозначение (slug).\n * @param value.id Идентификатор.\n * @param value.slug Символьное обозначение (slug).\n */\n // eslint-disable-next-line sonarjs/function-return-type\n transform(value: { id: number; slug: string }): number | string {\n return this.idOrSlug === 'id' ? value.id : value.slug;\n }\n}\n","// noinspection TypeScriptValidateTypes\n\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, inject, Injectable } from '@angular/core';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { catchError, expand, filter, first, map, Observable, of, shareReplay, skip, switchMap, takeWhile, tap, toArray } from 'rxjs';\n\nimport { ScICacheLifetime } from '../../config/sc-i-cache-lifetime';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScConvertersService } from '../../converters/services/sc-converters.service';\nimport { ScIPaginate } from '../../pagination/dto/sc-i-paginate';\nimport { ScIdOrSlugPipe } from '../../pipes/sc-id-or-slug.pipe';\nimport { SC_CACHE_LIFETIME } from '../../tokens/sc-cache-lifetime';\nimport { SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT } from '../../tokens/sc-is-hidden-error-alert';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUIService } from '../../ui/services/sc-ui.service';\nimport { ScUserService } from '../../user/services/sc-user.service';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScCachedItem } from '../classes';\nimport { ScCategory } from '../dto/sc-category';\nimport { ScIProductNotifyWhenInStock } from '../dto/sc-i-product-notify-when-in-stock';\nimport { ScProduct } from '../dto/sc-product';\nimport { ScVirtualCategory } from '../dto/sc-virtual-category';\nimport { ScMimeTypes } from '../enums/sc-mime-types';\nimport { ScICategoryProductParams } from '../interfaces/sc-i-category-product-params';\nimport { ScICategoryProductPaginationParams } from '../interfaces/sc-i-category-products-pagination-params';\nimport { ScICategoryDTO, ScIProductDTO } from '../internal';\nimport { ScIVirtualCategoryDTO } from '../internal/sc-i-virtual-category-dto';\nimport { SC_COUNT_FIRST_DISCOUNTED_PRODUCTS } from '../tokens/sc-count-first-discounted-products';\nimport { ScPriceHistory } from '../types/sc-price-history';\n\n/**\n * Сервис для работы с каталогом.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScCatalogService {\n /**\n * {@link Map} коллекция пар ключ-значение для категорий каталога.\n *\n * @deprecated\n */\n private idCategoryMap: Map<number | string | undefined, ScCategory> = new Map<number | string | undefined, ScCategory>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для виртуальных категорий.\n */\n private virtualCategoryMap: Map<string, ScCachedItem<ScVirtualCategory>> = new Map<string, ScCachedItem<ScVirtualCategory>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для кэшированных категорий каталога.\n */\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n private categoryMap: Map<number | string | void, ScCachedItem<ScCategory>> = new Map<number | string | void, ScCachedItem<ScCategory>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для продуктов каталога.\n */\n private productMap: Map<number | string, ScCachedItem<ScProduct>> = new Map<number | string, ScCachedItem<ScProduct>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для кэшированных товаров категории каталога.\n */\n private categoryProductsMap: Map<number | string, ScCachedItem<ScProduct[]>> = new Map<number, ScCachedItem<ScProduct[]>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для кэширования истории цен.\n */\n private productHistoryMap: Map<number | string, ScCachedItem<ScPriceHistory>> = new Map<number | string, ScCachedItem<ScPriceHistory>>();\n\n /**\n * Пайп, возвращающий идентификатор или символьное обозначение (slug) исходя из настроек окружения.\n */\n private readonly idOrSlugPipe: ScIdOrSlugPipe = inject(ScIdOrSlugPipe);\n\n /**\n * {@link Map} коллекция пар ключ-значение для сопоставления slug и id категорий при кешировании запросов, если идентификатор отличается от установленного в проекте (slug/id).\n */\n private readonly categoryIdOrSlugMap: Map<number | string, number | string> = new Map<number | string, number | string>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для сопоставления slug и id товаров при кешировании запросов, если идентификатор отличается от установленного в проекте (slug/id).\n */\n private readonly productIdOrSlugMap: Map<number | string, number | string> = new Map<number | string, number | string>();\n\n /**\n * Число первых записей товаров со скидкой.\n */\n private readonly countFirstDiscountedProducts: number = inject(SC_COUNT_FIRST_DISCOUNTED_PRODUCTS);\n\n /**\n * Сервис информации о пользователе.\n */\n private readonly userService: ScUserService = inject(ScUserService);\n\n /**\n * {@link Observable} изменения списка товаров со скидкой.\n */\n public readonly firstDiscounted$: Observable<ScIPaginate<ScProduct> | null> = inject(SC_USER_INFO).pipe(\n switchMap((user) =>\n user.isGuest ? of(null) : this.getProducts$({ filters: { onlyDiscounted: true }, paginate: true, page: 1, perPage: this.countFirstDiscountedProducts })\n ),\n shareReplay(1)\n );\n\n /**\n * {@link Observable} изменения списка из первых товаров со скидкой.\n */\n public readonly firstDiscountedProducts$: Observable<ScProduct[]> = this.firstDiscounted$.pipe(map((data) => data?.data ?? []));\n\n /**\n * {@link Observable} изменения общего колличества товара со скидкой.\n */\n public readonly countDiscountedProducts$: Observable<number> = this.firstDiscounted$.pipe(map((data) => data?.meta.total ?? 0));\n\n /**\n * Инициализирует экземпляр класса {@link ScCatalogService}.\n *\n * @param http Сервис для выполнения HTTP-запросов.\n * @param urls Список ссылок на разделы backend'a.\n * @param uiService Сервис для работы с UI.\n * @param convertersService Сервис конвертации данных.\n * @param cacheLifeTime Объект с информацией о времени жизни данных.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n private readonly uiService: ScUIService,\n private readonly convertersService: ScConvertersService,\n @Inject(SC_CACHE_LIFETIME) private readonly cacheLifeTime: ScICacheLifetime,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {\n this.userService\n .getUserChange$()\n .pipe(skip(1))\n .subscribe(() => {\n this.idCategoryMap.clear();\n this.categoryMap.clear();\n this.productHistoryMap.clear();\n this.productMap.clear();\n this.categoryProductsMap.clear();\n this.virtualCategoryMap.clear();\n });\n }\n\n /**\n * Возвращает категорию из коллекции каталога, если её срок жизни не истёк.\n *\n * @deprecated Удалить в рамках задачи TASK[#10153].\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n */\n public getCategoryFromMap(categoryIdOrSlug?: number | string): ScCategory | undefined {\n const category = this.idCategoryMap.get(categoryIdOrSlug?.toString());\n\n if (category && (!category.parentCategory || !category.loadedAt || category.cachedDataIsActual(this.cacheLifeTime.categoryData))) {\n return category;\n }\n\n this.idCategoryMap.delete(categoryIdOrSlug?.toString());\n\n return undefined;\n }\n\n /**\n * Создает запрос получения списка категорий товаров или список корневых категорий, если идентификатор категории не указан.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n */\n private getCategoryData$(categoryIdOrSlug?: number | string): Observable<ScCategory> {\n return this.http.get<ScICategoryDTO>(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug ?? ''}`).pipe(\n map((category) => new ScCategory(category)),\n tap((category) => {\n if (categoryIdOrSlug) {\n this.categoryIdOrSlugMap.set(typeof categoryIdOrSlug === 'string' ? category.id : category.slug, categoryIdOrSlug);\n }\n })\n );\n }\n\n /**\n * Возвращает {@link Observable} корневых категорий с настройками отображения, чтобы реагировать на изменения.\n */\n public getFilteredRootCategories$(): Observable<ScCategory[]> {\n return this.uiService.getHiddenCategoriesList$().pipe(\n switchMap((filters) =>\n this.getRootCategories$().pipe(\n filter(tuiIsPresent),\n map((data) => data.filter((category) => category.id && !filters.includes(category.id)))\n )\n )\n );\n }\n\n /**\n * Возвращает {@link Observable} содержимого виртуальной категории.\n *\n * @param slug Символьный идентификатор виртуальной категории.\n */\n public getVirtualCategoryCached$(slug: string): Observable<ScVirtualCategory | null> {\n let cachedItem = this.virtualCategoryMap.get(slug);\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(\n this.cacheLifeTime.categoryData,\n this.http.get<ScIVirtualCategoryDTO>(`${this.urls.apiUrl}/catalog/v-categories/${slug}`).pipe(map((category) => new ScVirtualCategory(category)))\n );\n\n this.virtualCategoryMap.set(slug, cachedItem);\n }\n\n if (!cachedItem.cachedDataIsActual()) {\n cachedItem.update();\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Возвращает {@link Observable} содержимого категории.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n */\n public getCategoryCached$(categoryIdOrSlug?: number | string): Observable<ScCategory | null> {\n if (categoryIdOrSlug && this.categoryIdOrSlugMap.has(categoryIdOrSlug)) {\n // eslint-disable-next-line no-param-reassign\n categoryIdOrSlug = this.categoryIdOrSlugMap.get(categoryIdOrSlug);\n }\n\n let cachedItem = this.categoryMap.get(categoryIdOrSlug?.toString());\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.getCategoryData$(categoryIdOrSlug));\n this.categoryMap.set(categoryIdOrSlug?.toString(), cachedItem);\n }\n\n if (!cachedItem.cachedDataIsActual()) {\n cachedItem.update();\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создает запрос получения корневых категорий.\n */\n public getNullCategory$(): Observable<ScCategory | null> {\n return this.getCategoryCached$();\n }\n\n /**\n * Создает запрос получения корневых категорий.\n */\n public getRootCategories$(): Observable<ScCategory[] | null> {\n return this.getNullCategory$().pipe(map((nullCategory) => nullCategory?.categories ?? null));\n }\n\n /**\n * Раскрывает каталог до указанной категории.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории, до которой необходимо раскрыть каталог.\n * @returns Возвращает список раскрытых категорий.\n */\n public loadCatalogTreeCached$(categoryIdOrSlug: number | string) {\n return this.getCategoryCached$(categoryIdOrSlug).pipe(\n filter(tuiIsPresent),\n first(),\n expand((category) =>\n (category.parentCategory ? this.getCategoryCached$(this.idOrSlugPipe.transform(category.parentCategory)) : this.getNullCategory$()).pipe(\n filter(tuiIsPresent),\n first()\n )\n ),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition,sonarjs/different-types-comparison\n takeWhile((parentCategory) => parentCategory.parentCategory !== undefined, true),\n toArray(),\n // eslint-disable-next-line sonarjs/no-misleading-array-reverse\n map((categories) => categories.reverse())\n );\n }\n\n /**\n * Возвращает {@link Observable} получения истории изменения цен на продукт для клиента.\n *\n * @param product Продукт, для которого запрашивается цена.\n * @returns История изменения цен на продукт для клиента в формате {@link Observable} из запроса.\n */\n public getPriceHistory$(product: ScProduct): Observable<ScPriceHistory | null> {\n let cachedItem = this.productHistoryMap.get(product.id.toString());\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(\n this.cacheLifeTime.categoryData,\n this.http\n .get<ScPriceHistory>(`${this.urls.apiUrl}/catalog/products/${product.id}/price-history`, {\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(catchError(() => of({})))\n );\n\n this.productHistoryMap.set(product.id.toString(), cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создает запрос получения списка товаров для конкретной категории.\n *\n * @param params Параметры запроса товаров категории.\n */\n public getProducts$(params: ScICategoryProductParams): Observable<ScProduct[]>;\n\n /**\n * Создает запрос получения списка товаров каталога с пагинацией.\n *\n * @param params Параметры пагинации товаров.\n */\n public getProducts$(params: ScICategoryProductPaginationParams): Observable<ScIPaginate<ScProduct>>;\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n public getProducts$(params: ScICategoryProductParams | ScICategoryProductPaginationParams): Observable<ScProduct[] | ScIPaginate<ScProduct>> {\n return this.http\n .get<ScIPaginate<ScIProductDTO> | ScIProductDTO[]>(`${this.urls.apiUrl}/catalog/products`, {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n params: this.convertersService.toHttpParams({ ...params }, { nonNullable: true }),\n })\n .pipe(\n // eslint-disable-next-line sonarjs/function-return-type\n map((data) => {\n if ('meta' in data) {\n const cloneData = structuredClone(data);\n\n cloneData.data = cloneData.data.map((item) => new ScProduct(item));\n\n return cloneData as ScIPaginate<ScProduct>;\n }\n\n return data.map((item, index) => new ScProduct(item, index));\n })\n );\n }\n\n /**\n * Создает запрос получения списка товаров категории и кэширует его.\n *\n * @param params Параметры запроса товаров категории.\n */\n public getProductsCategoryCached$(params: ScICategoryProductParams): Observable<ScProduct[] | null> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!params.categoryId && !params.categorySlug) {\n throw new Error('Не указан id/slug категории.');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access\n const cachedKey = (params.categorySlug ?? params.categoryId)!;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access\n let cachedItem = this.categoryProductsMap.get(cachedKey.toString());\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.getProducts$(params));\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call\n this.categoryProductsMap.set(cachedKey.toString(), cachedItem);\n }\n\n if (!cachedItem.cachedDataIsActual()) {\n cachedItem.update();\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Возвращает информацию об указанном продукте.\n *\n * @param productIdOrSlug Идентификатор или slug товара/услуги.\n */\n public getProductData$(productIdOrSlug: number | string): Observable<ScProduct> {\n return this.http.get<ScIProductDTO>(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}`).pipe(\n map((productDTO) => new ScProduct(productDTO)),\n tap((product) => {\n if (productIdOrSlug) {\n this.productIdOrSlugMap.set(typeof productIdOrSlug === 'string' ? product.id : product.slug, productIdOrSlug);\n }\n })\n );\n }\n\n public getProductDataCached$(productIdOrSlug: number | string): Observable<ScProduct | null> {\n const valueFromMap = this.productIdOrSlugMap.get(productIdOrSlug);\n\n if (valueFromMap) {\n // eslint-disable-next-line no-param-reassign\n productIdOrSlug = valueFromMap;\n }\n let cachedItem = this.productMap.get(productIdOrSlug.toString());\n\n if (!cachedItem) {\n cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.getProductData$(productIdOrSlug));\n this.productMap.set(productIdOrSlug.toString(), cachedItem);\n }\n\n if (!cachedItem.cachedDataIsActual()) {\n cachedItem.update();\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создаёт запрос на получение генерируемого файла прайс-листа в формате {@link Blob}, и выгружает пользователю в браузер.\n *\n * @param type {@link ScMimeTypes} запрашиваемого файла.\n * @param categoryId Идентификатор категории, для которой загружается прайс-лист.\n */\n public downloadPrice$(type: ScMimeTypes, categoryId?: number): Observable<Blob> {\n const params = this.convertersService.toHttpParams(\n {\n format: Object.keys(ScMimeTypes)[Object.values(ScMimeTypes).indexOf(type)],\n category_id: categoryId ?? null,\n },\n { nonNullable: true }\n );\n\n return this.http.get(`${this.urls.apiUrl}/catalog/download`, { responseType: 'blob', params: params }).pipe(\n map((blob: Blob) => new Blob([blob], { type: type })),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.catalogPriceDownload,\n params: {\n category_id: categoryId ?? 'root',\n price_type: type,\n },\n });\n })\n );\n }\n\n /**\n * Запрос на уведомление пользователя о поступлении продукта.\n *\n * @param productIdOrSlug Идентификатор или slug товара.\n * @param data Данные для запроса.\n */\n public getProductNotifyWhenInStock$(productIdOrSlug: string | number, data: ScIProductNotifyWhenInStock): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/stock-notify`, data);\n }\n}\n","/* eslint-disable no-param-reassign,no-return-assign,no-void */\n\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, map, Observable, of, shareReplay, switchMap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScCategory } from '../dto';\nimport { ScICategoryDTO } from '../internal';\n\n/**\n * Сервис для работы с избранными товарами и категориями.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScFavoriteService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link BehaviorSubject} обновления списка избранных категорий.\n */\n private readonly categoriesUpdateSubject: BehaviorSubject<void> = new BehaviorSubject<void>(void {});\n\n /**\n * Сервис данных о пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * {@link Observable} списка избранных категорий.\n */\n public readonly categories$: Observable<ScCategory[]> = this.categoriesUpdateSubject.pipe(\n switchMap(() => this.user$),\n switchMap((user) => (user.isGuest ? of([]) : this.getFavoriteCategories$())),\n shareReplay(1) // Подогреваем запрос во избежание повторения запросов получения списка избранных категорий для новых подписчиков.\n );\n\n /**\n * Выполняет запрос получения списка избранных категорий.\n */\n public getFavoriteCategories$(): Observable<ScCategory[]> {\n return this.http\n .get<ScICategoryDTO[]>(`${this.urls.apiUrl}/favorites/categories`)\n .pipe(map((categoriesDTO) => categoriesDTO.map((categoryDTO) => new ScCategory(categoryDTO))));\n }\n\n /**\n * Запрос добавления указанной категории в избранное.\n *\n * @param categoryId Идентификатор категории, которую необходимо добавить в избранное.\n */\n public putCategory$(categoryId: number): Observable<undefined> {\n return this.http.put<undefined>(`${this.urls.apiUrl}/favorites/categories/${categoryId}`, {});\n }\n\n /**\n * Выполняет запрос удаления указанной категории из избранных.\n *\n * @param categoryId Идентификатор категории, которую необходимо удалить из избранных.\n */\n public deleteCategory$(categoryId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/favorites/categories/${categoryId}`);\n }\n\n /**\n * Обновляет список избранных категорий {@link categories$}.\n */\n public updateFavoriteCategories(): void {\n this.categoriesUpdateSubject.next();\n }\n\n /**\n * Выполняет запрос добавления указанного товара в избранное.\n *\n * @param productId Идентификатор товара, который необходимо добавить в избранное.\n */\n public putProduct$(productId: number): Observable<undefined> {\n return this.http.put<undefined>(`${this.urls.apiUrl}/favorites/products/${productId}`, {});\n }\n\n /**\n * Выполняет запрос удаления указанного продукта из избранных.\n *\n * @param productId Идентификатор товара, который необходимо удалить из избранных.\n */\n public deleteProduct$(productId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/favorites/products/${productId}`);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { tuiPure } from '@taiga-ui/cdk';\nimport { catchError, distinctUntilChanged, map, Observable, of, skip, startWith, switchMap } from 'rxjs';\n\nimport { ScCartService } from '../../cart';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScConvertersService } from '../../converters';\nimport { SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT } from '../../tokens/sc-is-hidden-error-alert';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScCachedItem } from '../classes';\nimport { ScProduct } from '../dto/sc-product';\nimport { ScIProductDTO } from '../internal';\n\n/**\n * Сервис для работы с рекомендуемыми товарами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScRecommendationService {\n /**\n * {@link Map} коллекция пар ключ-значение для кэшированных рекомендуемых товаров категории.\n */\n private readonly productsByCategoryMap: Map<number | string, ScCachedItem<ScProduct[]>> = new Map<number, ScCachedItem<ScProduct[]>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение для кэшированных рекомендуемых товаров товара.\n */\n private readonly productsByProductMap: Map<number | string, ScCachedItem<ScProduct[]>> = new Map<number, ScCachedItem<ScProduct[]>>();\n\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * Сервис для работы с корзиной.\n */\n private readonly cartService: ScCartService = inject(ScCartService);\n\n /**\n * Инициализирует экземпляр класса {@link ScRecommendationService}.\n */\n public constructor() {\n inject(SC_USER_INFO)\n .pipe(skip(1))\n .subscribe(() => {\n this.productsByCategoryMap.clear();\n this.productsByProductMap.clear();\n });\n }\n\n /**\n * Создает запрос на получение списка рекомендованных товаров для категории.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n */\n public getProductsByCategory$(categoryIdOrSlug: number | string): Observable<ScProduct[] | null> {\n let cachedItem = this.productsByCategoryMap.get(categoryIdOrSlug.toString());\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().\n cachedItem = new ScCachedItem(\n 0,\n this.http\n .get<ScIProductDTO[]>(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/recommendations`, {\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(\n catchError(() => of([])),\n map((productsDTO) => productsDTO.map((product) => new ScProduct(product)))\n )\n );\n this.productsByCategoryMap.set(categoryIdOrSlug.toString(), cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создает запрос на получение списка рекомендованных товаров для продукта.\n *\n * @param productIdOrSlug Идентификатор или slug товара/услуги.\n */\n public getProductsByProduct$(productIdOrSlug: number | string): Observable<ScProduct[] | null> {\n let cachedItem = this.productsByProductMap.get(productIdOrSlug.toString());\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().\n cachedItem = new ScCachedItem(\n 0,\n this.http\n .get<ScIProductDTO[]>(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/recommendations`, {\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(\n catchError(() => of([])),\n map((productsDTO) => productsDTO.map((product) => new ScProduct(product)))\n )\n );\n this.productsByProductMap.set(productIdOrSlug.toString(), cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создает запрос на получение списка рекомендованных товаров для списка идентификаторов товаров.\n *\n * @param productIds Идентификаторы продуктов.\n */\n public getProductsByProductIds$(productIds: number[]): Observable<ScProduct[]> {\n return this.http\n .get<ScIProductDTO[]>(`${this.urls.apiUrl}/catalog/products/recommendations`, {\n params: this.convertersService.toHttpParams({ products: productIds }, { nonNullable: true }),\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n })\n .pipe(\n catchError(() => of([])),\n map((productsDTO) => productsDTO.map((product) => new ScProduct(product)))\n );\n }\n\n /**\n * Создает запрос на получение списка рекомендованных товаров для корзины клиента.\n */\n @tuiPure\n public getProductsByCart$(): Observable<ScProduct[] | null> {\n return this.cartService.getCartChange$().pipe(\n map((cart) => cart.items.map((item) => Number(item.product.id))),\n // Отфильтровываем повторения. Они возникнут если было изменено количество товара без удаления\\добавления новых товаров.\n // eslint-disable-next-line sonarjs/no-misleading-array-reverse\n distinctUntilChanged((previous, current) => JSON.stringify(previous.sort((a, b) => a - b)) === JSON.stringify(current.sort((a, b) => a - b))),\n switchMap((productIds) => this.getProductsByProductIds$(productIds).pipe(startWith(null)))\n );\n }\n}\n","/**\n * Перечисление ключей маршрутов.\n */\nexport enum ScRouteKeys {\n /**\n * Ключ главной страницы.\n */\n landing = 'landing',\n\n /**\n * Ключ страницы контактов и реквизитов.\n */\n contacts = 'contacts',\n\n /**\n * Ключ страницы публичной оферты.\n */\n offer = 'offer',\n\n /**\n * Ключ страницы политики обработки персональных данных.\n */\n personalDataProcessingPolicy = 'personal_data_processing_policy',\n\n /**\n * Ключ страницы ошибок.\n */\n error = 'error',\n\n /**\n * Ключ страницы файлы и документы.\n */\n files = 'files',\n\n /**\n * Ключ страницы вакансий.\n */\n vacancies = 'vacancies',\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { map, Observable, of, tap } from 'rxjs';\n\nimport { ScCatalogService, ScIProductDTO, ScProduct } from '../../catalog';\nimport { ScIUrls } from '../../config';\nimport { SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_URLS } from '../../tokens';\nimport { ScIConfiguratorBase, ScIConfiguratorSettingsBase } from '../dto';\nimport { ScTypeByKey } from '../types';\n\n/**\n * Сервис для работы с конфигуратором.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScConfiguratorService {\n /**\n * Инициализирует экземпляр класса {@link ScConfiguratorService}.\n *\n * @param configuratorComponents Список компонентов конфигураторов по их названию.\n * @param configuratorSettings Список моделей настроек конфигураторов по их названию.\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n * @param catalogService Сервис для работы с каталогом.\n */\n public constructor(\n @Inject(SC_CONFIGURATOR_COMPONENTS) private readonly configuratorComponents: ScTypeByKey<ScIConfiguratorBase>,\n @Optional() @Inject(SC_CONFIGURATOR_SETTINGS) private readonly configuratorSettings: ScTypeByKey<ScIConfiguratorSettingsBase> | undefined,\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n private readonly catalogService: ScCatalogService\n ) {}\n\n /**\n * Возвращает признак того, что конфигуратор с указанным названием существует и реализован.\n *\n * @param name Название конфигуратора.\n */\n public isConfiguratorExists(name: string): boolean {\n return Object.keys(this.configuratorComponents).includes(name);\n }\n\n /**\n * Возвращает настройки конфигуратора категории.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n * @param editor Название конфигуратора.\n */\n public getSettings$(categoryIdOrSlug: string | number, editor: string) {\n const category = this.catalogService.getCategoryFromMap(categoryIdOrSlug);\n\n if (category?.configuratorSettings) {\n return of(category.configuratorSettings);\n }\n\n return this.http.get<ScIConfiguratorSettingsBase>(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/configurators/${editor}/settings`).pipe(\n // eslint-disable-next-line security/detect-object-injection\n map((settings) => (this.configuratorSettings && editor in this.configuratorSettings ? new this.configuratorSettings[editor](settings) : settings)),\n tap((settings) => {\n if (category) {\n category.configuratorSettings = settings;\n }\n })\n );\n }\n\n /**\n * Возвращает информацию о продукте, по указанным параметрам конфигуратора.\n *\n * @param categoryIdOrSlug Идентификатор или slug категории товаров.\n * @param editor Название конфигуратора.\n * @param params Параметры конфигуратора для поиска товара.\n */\n public getProduct$(categoryIdOrSlug: string | number, editor: string, params: HttpParams): Observable<ScProduct> {\n return this.http\n .get<ScIProductDTO>(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/configurators/${editor}/product`, { params: params })\n .pipe(map((productDTO) => new ScProduct(productDTO)));\n }\n\n /**\n * Создаёт пользовательский шаблон конфигуратора.\n *\n * @param categoryId Идентификатор записи категории товаров.\n * @param editor Название конфигуратора.\n * @param newTemplate Параметры шаблона для создания.\n */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n public saveTemplate$<T>(categoryId: number, editor: string, newTemplate: T): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/catalog/categories/${categoryId}/configurators/${editor}/template`, newTemplate);\n }\n\n /**\n * Удаляет пользовательский шаблон конфигуратора.\n *\n * @param categoryId Идентификатор записи категории товаров.\n * @param editor Название конфигуратора.\n * @param templateId Идентификатор записи шаблона.\n */\n public removeTemplate$(categoryId: number, editor: string, templateId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/catalog/categories/${categoryId}/configurators/${editor}/template/${templateId}`);\n }\n}\n","/**\n * Перечисление, представляющее различные формы обратной связи.\n */\nexport enum ScFeedbackForms {\n /**\n * Пожелания и предложения по улучшению сайта.\n */\n suggest = 'suggest',\n\n /**\n * Оставить заявку на получение бесплатных образцов.\n */\n samples = 'samples',\n\n /**\n * Форма обратной связи со страницы контактов.\n */\n contacts = 'contacts',\n\n /**\n * Форма обратной связи со страницы вакансий.\n */\n vacancies = 'vacancies',\n\n /**\n * Задать вопрос.\n */\n questions = 'questions',\n\n /**\n * Заказать изготовление москитной сетки.\n */\n mosquitoes = 'mosquitoes',\n}\n","/**\n * Перечисление типов контактов по социальным сетям.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScSocialType {\n /**\n * @see [Инстаграм](https://www.instagram.com/)\n */\n instagram = 'instagram',\n\n /**\n * @see [Одноклассники](https://ok.ru/)\n */\n ok = 'ok',\n\n /**\n * @see [Telegram](https://telegram.org/)\n */\n telegram = 'telegram',\n\n /**\n * @see [В Контакте](https://vk.com/)\n */\n vk = 'vk',\n}\n","/**\n * Модель данных для загружаемого файла.\n */\nexport class ScUploadedFile {\n /**\n * Инициализирует экземпляр класса {@link ScUploadedFile}.\n *\n * @param name Название загружаемого пользователем файла.\n * @param content Содержимое файла кодированное в base64.\n */\n public constructor(\n public name: string,\n public content: string\n ) {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, of, switchMap, tap } from 'rxjs';\n\nimport { ScCachedItem } from '../../catalog/classes/sc-cached-item';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScIContact } from '../../user/dto/sc-i-contact';\nimport { ScIContactBase } from '../../user/dto/sc-i-contact-base';\nimport { ScIContactOnDataCreate } from '../../user/dto/sc-i-contact-on-data-create';\nimport { ScIContactWithRelations } from '../../user/dto/sc-i-contact-with-relations';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScIOrgContact } from '../dto';\n\n/**\n * Сервис для работы с контактными лицами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScContactsService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * {@link Observable} получения списка контактных лиц пользователя, контрагентов пользователя и адресов доставки пользователя.\n */\n private readonly allContacts: ScCachedItem<ScIContact[]> = new ScCachedItem<ScIContact[]>(\n 0,\n this.user$.pipe(switchMap((user) => (user.isGuest ? of(null) : this.http.get<ScIContact[]>(`${this.urls.apiUrl}/user/contacts/all`))))\n );\n\n /**\n * {@link Observable} получения списка контактных лиц пользователя.\n */\n public readonly userContacts: ScCachedItem<ScIContact[]> = new ScCachedItem<ScIContact[]>(\n 0,\n this.user$.pipe(switchMap((user) => (user.isGuest ? of(null) : this.http.get<ScIContact[]>(`${this.urls.apiUrl}/user/contacts`))))\n );\n\n /**\n * {@link Map} коллекция пар ключ-значение с данными о контактных лицах адресов доставки.\n */\n public readonly deliveryAddressContactsMap: Map<number, ScCachedItem<ScIContactWithRelations[]>> = new Map<number, ScCachedItem<ScIContactWithRelations[]>>();\n\n /**\n * {@link Map} коллекция пар ключ-значение с данными о контактных лицах контрагентов.\n */\n public readonly contragentContactsMap: Map<number, ScCachedItem<ScIContact[]>> = new Map<number, ScCachedItem<ScIContact[]>>();\n\n /**\n * Возвращает список всех контактов.\n */\n public getContact$(): Observable<ScIContact[] | null> {\n return this.allContacts.item$;\n }\n\n /**\n * Создаёт запрос создания контактного лица.\n *\n * @param newContact Данные требуемые для создания контактного лица.\n */\n public createContact$(newContact: ScIContactOnDataCreate): Observable<ScIContactWithRelations> {\n return this.http.post<ScIContactWithRelations>(`${this.urls.apiUrl}/user/contacts`, newContact).pipe(\n tap(() => {\n this.allContacts.update();\n\n if (newContact.client) {\n this.userContacts.update();\n }\n\n if (newContact.addresses) {\n newContact.addresses.forEach((item) => this.deliveryAddressContactsMap.get(item.id)?.update());\n }\n\n if (newContact.contragents) {\n newContact.contragents.forEach((item) => this.contragentContactsMap.get(item.id)?.update());\n }\n })\n );\n }\n\n /**\n * Создаёт запрос изменения контактного лица пользователя.\n *\n * @param contactId Идентификатор контакта пользователя.\n * @param newContact Данные требуемые для создания контактного лица.\n */\n public editContact$(contactId: number, newContact: ScIContactBase): Observable<ScIContactWithRelations> {\n return this.http.patch<ScIContactWithRelations>(`${this.urls.apiUrl}/user/contacts/${contactId}`, newContact).pipe(\n tap(() => {\n this.allContacts.update();\n })\n );\n }\n\n /**\n * Создаёт запрос удаления контактного лица пользователя.\n *\n * @param contactId Идентификатор контакта пользователя.\n */\n public deleteContact$(contactId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/user/contacts/${contactId}`).pipe(\n tap(() => {\n this.allContacts.update();\n })\n );\n }\n\n /**\n * Создаёт запрос на получение списка контактов для помощи клиенту.\n *\n * @param params Параметры поиска контактов (телефон, почта или ID города).\n * @param params.phone Телефон клиента.\n * @param params.email Почта клиента.\n * @param params.cityId ID города.\n */\n public getHelpContacts$(params: { phone?: string; email?: string; cityId?: number }): Observable<ScIOrgContact[]> {\n return this.http.get<ScIOrgContact[]>(`${this.urls.apiUrl}/contacts/help`, {\n params: params,\n });\n }\n}\n","import { HttpContextToken } from '@angular/common/http';\n\n/**\n * Токен, указывающий на необходимость добавления заголовков в исходящие запросы.\n */\nexport const SC_IS_HEADER_REQUIRED: HttpContextToken<boolean> = new HttpContextToken<boolean>(() => true);\n","import { EventEmitter, InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIPaginationParams } from '../pagination/dto/sc-i-pagination-params';\n\n/**\n * Значения пагинации списка товаров категории по умолчанию.\n */\nexport const SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS: ScIPaginationParams = {\n perPage: 20,\n page: 0,\n};\n\n/**\n * Токен значений пагинации списка товаров в каталоге по умолчанию.\n */\nexport const SC_PRODUCT_PAGINATION_OPTIONS: InjectionToken<ScIPaginationParams> = tuiCreateToken(SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS);\n\n/**\n * Токен {@link EventEmitter} событие нажатия на кнопку \"Показать следующие позиции категории\".\n */\nexport const SC_NEXT_PAGE_PAGINATION_CLICK: InjectionToken<EventEmitter<void>> = tuiCreateToken(new EventEmitter<void>());\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, map, Observable, tap, throwError } from 'rxjs';\n\nimport { ScCategory, ScFiltersTreeCatalog } from '../../catalog';\nimport { ScICategoryDTO } from '../../catalog/internal';\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { ScISimpleSearch } from '..';\n\n/**\n * Сервис поиска по каталогу.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScSearchService {\n /**\n * {@link BehaviorSubject} поискового запрос.\n */\n private searchTerm$: BehaviorSubject<string | null> = new BehaviorSubject<string | null>(null);\n\n /**\n * Инициализирует экземпляр класса {@link ScSearchService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {}\n\n /**\n * Выполняет упрощенный поиск товаров и категорий. Возвращает ограниченное количество записей.\n *\n * @param term Поисковый запрос.\n */\n public simple$(term: string): Observable<ScISimpleSearch> {\n return this.http.get<ScISimpleSearch>(`${this.urls.apiUrl}/catalog/search/simple`, { params: { term: term } }).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.catalogSearch,\n params: {\n search_type: 'simple',\n term: term,\n },\n });\n })\n );\n }\n\n /**\n * Выполняет поиск категорий в каталоге.\n *\n * @param term Поисковый запрос.\n */\n public categories$(term: string): Observable<ScCategory[]> {\n return this.http.get<ScICategoryDTO[]>(`${this.urls.apiUrl}/catalog/search/categories`, { params: { term: term } }).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.catalogSearch,\n params: {\n search_type: 'categories',\n term: term,\n },\n });\n }),\n map((categories) => categories.map((item) => new ScCategory(item)))\n );\n }\n\n /**\n * Выполняет полный поиск по всему прайс-листу.\n *\n * @param term Поисковый запрос.\n * @param showOrderedProducts Признак того, что необходимо вернуть ранее заказанные продукты.\n * @param showFavoriteProducts Признак того, что необходимо вернуть избранные продукты.\n * @param showDiscountedProducts Признак того, что необходимо вернуть продукты со скидкой.\n */\n public full$(term?: string, showOrderedProducts?: boolean, showFavoriteProducts?: boolean, showDiscountedProducts?: boolean): Observable<ScFiltersTreeCatalog> {\n const params: Record<string, string | number> = {};\n\n if (term) {\n params['term'] = term;\n }\n\n if (showOrderedProducts) {\n params['show_ordered_products'] = Number(showOrderedProducts);\n }\n\n if (showFavoriteProducts) {\n params['show_favorite_products'] = Number(showFavoriteProducts);\n }\n\n if (showDiscountedProducts) {\n params['show_discounted_products'] = Number(showDiscountedProducts);\n }\n\n if (Object.keys(params).length > 0) {\n return this.http.get<ScFiltersTreeCatalog>(`${this.urls.apiUrl}/catalog/search/full`, { params: params }).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.catalogSearch,\n params: {\n search_type: 'full',\n term: term,\n },\n });\n })\n );\n }\n return throwError(() => new Error('Необходимо указать хотя бы один параметр.'));\n }\n\n /**\n * Устанавливает поисковый запрос в {@link BehaviorSubject}.\n *\n * @param term Поисковый запрос.\n */\n public setSearchTermChange(term: string | null): void {\n this.searchTerm$.next(term);\n }\n\n /**\n * Возвращает {@link Observable} поискового запроса.\n */\n public getSearchTermChange$(): Observable<string | null> {\n return this.searchTerm$.asObservable();\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { ScSearchService } from '../search/services/sc-search.service';\n\n/**\n * Токен поиска введенного терма.\n */\nexport const SEARCH_TERM: InjectionToken<Observable<string>> = new InjectionToken<Observable<string>>('SEARCH_TERM');\n\n/**\n * Токен минимального количества введенных символов в поле поиска.\n */\nexport const SC_MIN_LENGTH_SEARCH_TERM: InjectionToken<number> = new InjectionToken<number>('SC_MIN_LENGTH_SEARCH_TERM');\n\n/**\n * Токен максимального количества введенных символов в поле поиска.\n */\nexport const SC_MAX_LENGTH_SEARCH_TERM: InjectionToken<number> = new InjectionToken<number>('SC_MAX_LENGTH_SEARCH_TERM');\n\n/**\n * Возвращает введенный терм для поиска.\n *\n * @param searchService Сервис поиска по каталогу.\n * @param minLengthSearchTerm Минимальное количество введенных символов в поле поиска.\n * @param maxLengthSearchTerm Максимальное количество введенных символов в поле поиска.\n */\nexport function searchTermFactory(searchService: ScSearchService, minLengthSearchTerm: number, maxLengthSearchTerm: number): Observable<string> {\n return searchService\n .getSearchTermChange$()\n .pipe(map((searchTerm) => (searchTerm && searchTerm.length >= minLengthSearchTerm && searchTerm.length <= maxLengthSearchTerm ? searchTerm : '')));\n}\n\n/**\n * Провайдеры данных о поиске введенного терма.\n */\nexport const SEARCH_TERM_PROVIDERS: Provider[] = [\n {\n provide: SEARCH_TERM,\n deps: [ScSearchService, SC_MIN_LENGTH_SEARCH_TERM, SC_MAX_LENGTH_SEARCH_TERM],\n useFactory: searchTermFactory,\n },\n];\n","/* eslint-disable no-param-reassign,no-return-assign,jsdoc/check-param-names */\n\nimport { InjectionToken, Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { filter, map, Observable, shareReplay, switchMap } from 'rxjs';\n\nimport { ScVirtualCategory } from '../catalog/dto/sc-virtual-category';\nimport { ScCatalogService } from '../catalog/services/sc-catalog.service';\n\n/**\n * Токен потока данных о виртуальной категории.\n */\nexport const SC_VIRTUAL_CATEGORY_INFO = new InjectionToken<Observable<ScVirtualCategory | null>>('A stream with current virtual category information');\n\n/**\n * Фабрика создания потока данных виртуальной категории.\n *\n * @param paramMap Параметры.\n * @param paramMap.paramMap Параметры.\n * @param catalogService.paramMap Параметры маршрута.\n * @param catalogService Сервис для работы с каталогом.\n */\nfunction virtualCategoryFactory({ paramMap }: ActivatedRoute, catalogService: ScCatalogService): Observable<ScVirtualCategory | null> {\n return paramMap.pipe(\n map((params) => params.get('categorySlug')),\n filter(tuiIsPresent),\n switchMap((categorySlug) => catalogService.getVirtualCategoryCached$(categorySlug).pipe(shareReplay())),\n takeUntilDestroyed()\n );\n}\n\n/**\n * Провайдеры потока данных о виртуальной категории.\n */\nexport const SC_VIRTUAL_CATEGORY_PROVIDERS: Provider[] = [\n {\n provide: SC_VIRTUAL_CATEGORY_INFO,\n deps: [ActivatedRoute, ScCatalogService],\n useFactory: virtualCategoryFactory,\n },\n];\n","import { InjectionToken } from '@angular/core';\n\nimport { ScICompanyBaseInfo } from '../config/sc-i-company-base-info';\n\n/**\n * Токен для получения полной информации о компании.\n */\nexport const SC_COMPANY_INFO: InjectionToken<ScICompanyBaseInfo> = new InjectionToken<ScICompanyBaseInfo>('SC_COMPANY_INFO');\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { WA_LOCAL_STORAGE } from '@ng-web-apis/common';\nimport { filterByKey, StorageService, toValue, WA_STORAGE_EVENT } from '@ng-web-apis/storage';\nimport { isMatch, isString } from 'lodash-es';\nimport { combineLatest, filter, map, Observable, startWith, switchMap, tap } from 'rxjs';\n\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { IS_BROWSER } from '../../providers';\nimport { SC_CACHE_LIFETIME, SC_URLS } from '../../tokens';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUTM, ScUTMParams } from '../interfaces';\n\n/**\n * Сервис для работы с UTM-меткой страницы.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUTMService {\n /**\n * Список ссылок на разделы backend.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис для выполнения HTTP-запросов.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Сервис предоставляющий доступ к данным о маршруте.\n */\n private readonly activatedRoute = inject(ActivatedRoute);\n\n /**\n * Сервис маршрутизации.\n */\n private readonly router = inject(Router);\n\n /**\n * Сервис для работы с {@link Storage} и внедрению его через DI.\n */\n private readonly storageService: Storage = inject(StorageService);\n\n /**\n * Признак, что скрипт выполняется в браузере.\n */\n private readonly isBrowser: boolean = inject(IS_BROWSER);\n\n /**\n * Хранилище {@link Storage}.\n */\n private readonly storage: Storage | null = inject(WA_LOCAL_STORAGE, { optional: true });\n\n /**\n * Время жизни UTM метки (ms).\n */\n private readonly utmLifeTime?: number = inject(SC_CACHE_LIFETIME).utm;\n\n /**\n * {@link Observable} UTM-метка страницы.\n */\n private readonly utm$: Observable<ScUTM | null> = inject(WA_STORAGE_EVENT).pipe(\n filterByKey('utm'),\n toValue(),\n startWith(this.getUTMParams()),\n map((utmString) => (utmString === null ? utmString : (JSON.parse(utmString) as ScUTM)))\n );\n\n /**\n * {@link Observable} timestamp сохранения UTM в {@link Storage}.\n */\n private readonly utmTimestamp$ = inject(WA_STORAGE_EVENT).pipe(\n filterByKey('utmTimestamp'),\n toValue(),\n startWith(this.getUTMTimestamp()),\n map((timestamp) => (isString(timestamp) ? Number(timestamp) : timestamp))\n );\n\n /**\n * {@link Observable} UTM-метки страницы из параметров роутинга.\n */\n private readonly utmParamsFromRoute$: Observable<ScUTM> = this.router.events.pipe(\n filter((event) => Boolean(this.storage) && this.isBrowser && event instanceof NavigationEnd),\n map(() => this.activatedRoute),\n startWith(this.activatedRoute),\n map((route) => route.snapshot.queryParams),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n filter((params): params is ScUTMParams => params['utm_source'] && params['utm_medium'] && params['utm_campaign']),\n map((params) => {\n return {\n source: params.utm_source,\n medium: params.utm_medium,\n campaign: params.utm_campaign,\n content: params.utm_content,\n term: params.utm_term,\n };\n })\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScUTMService}.\n */\n public constructor() {\n // При получении UTM-метки сохраняем ее в Storage и создаём запрос сохранения метки за клиентом.\n inject(SC_USER_INFO)\n .pipe(\n switchMap(() => this.utmParamsFromRoute$),\n tap(() => {\n this.updateTimestamp();\n }),\n filter((utm) => !this.isExistingUTM(utm)),\n tap((utm) => {\n this.setUTM(utm);\n }),\n switchMap((utm) => this.saveUTM$(utm))\n )\n .subscribe();\n }\n\n /**\n * Возвращает строчное представление параметров UTM из {@link Storage}.\n */\n private getUTMParams(): string | null {\n return Boolean(this.storage) && this.isBrowser ? this.storageService.getItem('utm') : null;\n }\n\n /**\n * Возвращает строчное представление timestamp сохранения UTM из {@link Storage}.\n */\n private getUTMTimestamp(): string | null {\n return Boolean(this.storage) && this.isBrowser ? this.storageService.getItem('utmTimestamp') : null;\n }\n\n /**\n * Устанавливает UTM-метку страницы в {@link Storage}.\n *\n * @param utm Данные о UTM-метке.\n */\n private setUTM(utm: ScUTM): void {\n if (this.storage && this.isBrowser && !this.isExistingUTM(utm)) {\n this.storageService.setItem('utm', JSON.stringify(utm));\n }\n }\n\n /**\n * Удаляет UTM-метку страницы из {@link Storage}.\n */\n public removeUTM(): void {\n if (this.storage && this.isBrowser) {\n this.storageService.removeItem('utm');\n this.storageService.removeItem('utmTimestamp');\n }\n }\n\n /**\n * Возвращает {@link Observable} данных о UTM-метке.\n */\n public getUTM$(): Observable<ScUTM | null> {\n return combineLatest({\n utm: this.utm$,\n timestamp: this.utmTimestamp$,\n }).pipe(map(({ utm, timestamp }) => (!this.utmLifeTime || (timestamp && timestamp + this.utmLifeTime > Date.now()) ? utm : null)));\n }\n\n /**\n * Возвращает {@link Observable} сохранения {@link ScUTM}.\n *\n * @param utm Данные о UTM-метке.\n */\n public saveUTM$(utm: ScUTM): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/utm`, utm);\n }\n\n /**\n * Проверяет, существует ли уже сохраненная UTM-метка.\n *\n * @param utm Данные о UTM-метке.\n */\n private isExistingUTM(utm: ScUTM): boolean {\n const existingUTM = this.getUTMParams();\n return existingUTM ? isMatch(utm, JSON.parse(existingUTM) as ScUTM) : false;\n }\n\n /**\n * Обновляет timestamp сохранения UTM в {@link Storage}.\n */\n private updateTimestamp(): void {\n if (this.getUTMParams()) {\n this.storageService.setItem('utmTimestamp', JSON.stringify(Date.now()));\n }\n }\n}\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { Inject, inject, Injectable } from '@angular/core';\nimport { first, map, Observable, shareReplay, switchMap, tap } from 'rxjs';\n\nimport { ScIFeedbackAPI } from '../../config';\nimport { SC_AUTH_ADD_HEADER_REQUIRED } from '../../httpInterceptors/tokens/sc-auth-add-header-required';\nimport { SC_IS_HEADER_REQUIRED } from '../../httpInterceptors/tokens/sc-is-header-required';\nimport { ScIReferencesTypes } from '../../references/dto/sc-i-references-types';\nimport { SC_FEEDBACK_API } from '../../tokens/sc-feedback-api';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { ScUTMService } from '../../utm/services/sc-utm.service';\nimport { ScIFeedbackMessage } from '../dto';\nimport { ScFeedbackForms } from '../enums/sc-feedback-forms';\n\n/**\n * Сервис обратной связи.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScFeedbackService {\n /**\n * Сервис для работы с UTM-метками.\n */\n private readonly utmService: ScUTMService = inject(ScUTMService);\n\n /**\n * Список форм обратной связи.\n */\n public readonly feedbackForms$: Observable<Array<ScIReferencesTypes<ScFeedbackForms>>> = this.http\n .get<Array<ScIReferencesTypes<ScFeedbackForms>>>(`${this.feedbackApi.apiUrl}/feedback/forms`, {\n context: new HttpContext().set(SC_AUTH_ADD_HEADER_REQUIRED, false).set(SC_IS_HEADER_REQUIRED, false),\n headers: {\n [this.feedbackApi.authTokenName]: this.feedbackApi.authToken,\n },\n })\n .pipe(shareReplay(1));\n\n /**\n * Инициализирует экземпляр класса {@link ScFeedbackService}.\n *\n * @param http HTTP-клиент.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param feedbackApi Данные для взаимодействия с API обратной связи.\n */\n public constructor(\n private readonly http: HttpClient,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Inject(SC_FEEDBACK_API)\n private readonly feedbackApi: ScIFeedbackAPI\n ) {}\n\n /**\n * Отправляет сообщение обратной связи.\n *\n * @param formSlug Символьное обозначение (slug) формы.\n * @param feedbackMessage Объект сообщения обратной связи.\n */\n public sendFeedback(formSlug: ScFeedbackForms, feedbackMessage: ScIFeedbackMessage): Observable<undefined> {\n return this.utmService.getUTM$().pipe(\n first(),\n map((utm) => (utm ? { ...feedbackMessage, utm } : feedbackMessage)),\n switchMap((data) =>\n this.http.post<undefined>(`${this.feedbackApi.apiUrl}/feedback/${formSlug}`, data, {\n context: new HttpContext().set(SC_AUTH_ADD_HEADER_REQUIRED, false).set(SC_IS_HEADER_REQUIRED, false),\n headers: {\n [this.feedbackApi.authTokenName]: this.feedbackApi.authToken,\n },\n })\n ),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.feedbackSent,\n });\n })\n );\n }\n}\n","/* eslint-disable no-param-reassign */\n\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, first, map, Observable, shareReplay, switchMap, tap } from 'rxjs';\n\nimport { ScAuthService } from '../../auth';\nimport { ScIUrls } from '../../config';\nimport { ScICity, ScIRegionWithCities } from '../../locations';\nimport { SC_URLS } from '../../tokens';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScIContactAndMedia, ScIDirectionManagerContact, ScIOrgContact, ScIRequisites, ScISocialMedia } from '../dto';\nimport { ScIRetailContact } from '../dto/sc-i-retail-contact';\n\n/**\n * Сервис для работы с реквизитами и с обойной связью.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScRequisitesService {\n /**\n * {@link BehaviorSubject} поискового запроса на странице контактов.\n */\n private searchTerm$: BehaviorSubject<string | null> = new BehaviorSubject<string | null>(null);\n\n /**\n * {@link Map} коллекция пар ключ-значение для контактов менеджера по направлению продаж.\n */\n private idManagerMap: Map<number, ScIDirectionManagerContact> = new Map<number, ScIDirectionManagerContact>();\n\n /**\n * Создаёт запрос получения списка всех контактов.\n */\n public contacts$: Observable<ScIContactAndMedia> = inject(SC_USER_INFO).pipe(\n switchMap(() => this.http.get<ScIContactAndMedia>(`${this.urls.apiUrl}/contacts`)),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос получения списка контактов для решения возникающих вопросов.\n */\n public personal$: Observable<ScIOrgContact[]> = this.contacts$.pipe(map((contacts: ScIContactAndMedia) => contacts.personal));\n\n /**\n * Создаёт запрос получения списка контактов розничных магазинов.\n */\n public retail$: Observable<ScIRetailContact[] | undefined> = this.contacts$.pipe(\n map((contacts: ScIContactAndMedia) => contacts.retail),\n first(),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос получения списка ссылок на социальные сети и другие каналы коммуникации.\n */\n public socialMedia$: Observable<ScISocialMedia[]> = this.contacts$.pipe(\n map((contacts: ScIContactAndMedia) => contacts.socialMedia),\n first(),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос получения списка контактов менеджеров по направлениям продаж.\n */\n public directions$: Observable<Partial<Record<number, ScIDirectionManagerContact[]>>> = this.contacts$.pipe(\n map((contacts: ScIContactAndMedia) => contacts.directions),\n tap((directions) => {\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in directions) {\n directions[Number.parseFloat(key)]?.forEach((manager) => {\n this.mapManagers(Number.parseFloat(key), manager);\n });\n }\n }),\n first(),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос получения списка реквизитов компании.\n */\n public requisites$: Observable<ScIRequisites> = this.http.get<ScIRequisites>(`${this.urls.apiUrl}/requisites`).pipe(shareReplay(1));\n\n /**\n * Инициализирует экземпляр класса {@link ScRequisitesService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n * @param authService Сервис аутентификации.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n private readonly authService: ScAuthService\n ) {}\n\n /**\n * Устанавливает поисковый запрос в {@link BehaviorSubject}.\n *\n * @param term Поисковый запрос.\n */\n public setSearchTermChange(term: string | null): void {\n this.searchTerm$.next(term);\n }\n\n /**\n * Возвращает {@link Observable} поискового запроса.\n */\n public getSearchTermChange$(): Observable<string | null> {\n return this.searchTerm$.asObservable();\n }\n\n /**\n * Возвращает поисковый запрос.\n */\n public getCurrentSearchTerm(): string | null {\n return this.searchTerm$.getValue();\n }\n\n /**\n * Проходит по древовидному представлению контактов менеджеров и записывает каждого менеджера в {@link Map} по ключу идентификатора.\n *\n * @param directionId Идентификатор направления продаж.\n * @param manager Контакты менеджера по направлению продаж.\n */\n private mapManagers(directionId: number, manager: ScIDirectionManagerContact): void {\n if (!manager.id) return;\n\n manager.directionId = directionId;\n this.idManagerMap.set(manager.id, this.sortManagerCities(manager));\n\n if (!manager.managers) return;\n\n manager.managers.forEach((subManager) => {\n this.mapManagers(directionId, subManager);\n });\n }\n\n /**\n * Сортирует города менеджера.\n *\n * @param manager Контакты менеджера по направлению продаж.\n */\n // eslint-disable-next-line class-methods-use-this\n private sortManagerCities(manager: ScIDirectionManagerContact): ScIDirectionManagerContact {\n manager.regions = manager.regions?.map<ScIRegionWithCities>((region) => {\n region.cities = region.cities?.sort((a: ScICity, b: ScICity) => {\n if (a.name > b.name) {\n return 1;\n }\n\n if (a.name < b.name) {\n return -1;\n }\n\n return 0;\n });\n return region;\n });\n\n return manager;\n }\n\n /**\n * Возвращает запись контакта менеджера по идентификатору.\n *\n * @param managerId Идентификатор менеджера.\n */\n public getManagerById(managerId: number): ScIDirectionManagerContact | undefined {\n return this.idManagerMap.get(managerId);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, filter, Observable, of, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\nimport { ScCachedItem } from '../../catalog/classes/sc-cached-item';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScContactsService } from '../../contacts/services/sc-contacts.service';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScIContact } from '../../user/dto/sc-i-contact';\nimport { ScIContactOnDataCreate } from '../../user/dto/sc-i-contact-on-data-create';\nimport { ScIContactWithRelations } from '../../user/dto/sc-i-contact-with-relations';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScContragent, ScContragentOnDataCreate, ScIBankAccountOnDataCreate } from '../dto';\nimport { ScIBankAccount } from '../dto/sc-i-bank-account';\n\n/**\n * Сервис работы с контрагентами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScContragentService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Сервис для работы с контактными лицами.\n */\n private readonly contactsService: ScContactsService = inject(ScContactsService);\n\n /**\n * {@link BehaviorSubject} обновления контрагентов.\n */\n private readonly contragentsUpdate$: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);\n\n /**\n * {@link Map} коллекция пар ключ-значение с данными о банковских счетах контрагентов.\n */\n private readonly contragentBankAccountsMap: Map<number, ScCachedItem<ScIBankAccount[]>> = new Map<number, ScCachedItem<ScIBankAccount[]>>();\n\n /**\n * {@link Observable} данных о контрагентах пользователя.\n */\n public readonly contragents$: Observable<ScContragent[] | null> = this.contragentsUpdate$.pipe(\n switchMap(() => this.user$),\n switchMap((user) => (user.isGuest ? of(null) : this.http.get<ScContragent[]>(`${this.urls.apiUrl}/user/contragents`).pipe(startWith(null)))),\n shareReplay(1)\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScContragentService}.\n *\n */\n public constructor() {\n this.user$.pipe(filter((user) => user.isGuest)).subscribe(() => {\n this.contactsService.contragentContactsMap.clear();\n this.contragentBankAccountsMap.clear();\n });\n }\n\n /**\n * Создаёт запрос создания нового контрагента.\n *\n * @param newContragent Данные нового контрагента.\n */\n public createContragent$(newContragent: ScContragentOnDataCreate): Observable<ScContragent> {\n return this.http.post<ScContragent>(`${this.urls.apiUrl}/user/contragents`, newContragent).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileContragentAdded,\n });\n }),\n tap(() => {\n this.contragentsUpdate$.next();\n })\n );\n }\n\n /**\n * Создаёт запрос на удаление контрагента.\n *\n * @param contragentId Идентификатор контрагента, которого необходимо удалить.\n */\n public deleteContragent$(contragentId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/user/contragents/${contragentId}`).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileContragentDeleted,\n params: { contragent_id: contragentId },\n });\n }),\n tap(() => {\n this.contragentsUpdate$.next();\n this.contragentBankAccountsMap.delete(contragentId);\n })\n );\n }\n\n /**\n * Создаёт запрос получения списка контактных лиц контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n */\n public getContragentContacts$(contragentId: number): Observable<ScIContact[] | null> {\n let cachedItem = this.contactsService.contragentContactsMap.get(contragentId);\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update() в будущем.\n cachedItem = new ScCachedItem(0, this.http.get<ScIContact[]>(`${this.urls.apiUrl}/user/contragents/${contragentId}/contacts`));\n this.contactsService.contragentContactsMap.set(contragentId, cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создаёт запрос создания контактного лица контрагенту.\n *\n * @param contragentId Идентификатор контрагента.\n * @param newContact Данные требуемые для создания контактного лица.\n * @returns Возвращает {@link Observable} созданного контактного лица.\n */\n public createContragentContact$(contragentId: number, newContact: ScIContactOnDataCreate): Observable<ScIContactWithRelations> {\n return this.contactsService.createContact$({ ...newContact, contragents: [{ id: contragentId }] });\n }\n\n /**\n * Создаёт запрос удаления контактного лица контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n * @param contactId Идентификатор контактного лица.\n */\n public deleteContragentContact$(contragentId: number, contactId: number): Observable<undefined> {\n return this.contactsService.deleteContact$(contactId).pipe(tap(() => this.contactsService.contragentContactsMap.get(contragentId)?.update()));\n }\n\n /**\n * Создаёт запрос получения списка банковских счетов контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n */\n public getContragentBankAccounts$(contragentId: number): Observable<ScIBankAccount[] | null> {\n let cachedItem = this.contragentBankAccountsMap.get(contragentId);\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().\n cachedItem = new ScCachedItem(0, this.http.get<ScIBankAccount[]>(`${this.urls.apiUrl}/user/contragents/${contragentId}/bank-accounts`));\n this.contragentBankAccountsMap.set(contragentId, cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создаёт запрос создания банковского счёта контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n * @param newBankAccount Данные требуемые для создания банковского счета.\n * @returns Возвращает {@link Observable} созданного счёта контрагента.\n */\n public createContragentBankAccount$(contragentId: number, newBankAccount: ScIBankAccountOnDataCreate): Observable<ScIBankAccount> {\n return this.http\n .post<ScIBankAccount>(`${this.urls.apiUrl}/user/contragents/${contragentId}/bank-accounts`, newBankAccount)\n .pipe(tap(() => this.contragentBankAccountsMap.get(contragentId)?.update()));\n }\n\n /**\n * Создаёт запрос удаления банковского счета контрагента.\n *\n * @param contragentId Идентификатор контрагента.\n * @param bankAccountId Идентификатор банковского счета.\n */\n public deleteContragentBankAccount$(contragentId: number, bankAccountId: number): Observable<undefined> {\n return this.http\n .delete<undefined>(`${this.urls.apiUrl}/user/contragents/${contragentId}/bank-accounts/${bankAccountId}`)\n .pipe(tap(() => this.contragentBankAccountsMap.get(contragentId)?.update()));\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\nimport { ScCachedItem } from '../../catalog/classes/sc-cached-item';\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScContactsService } from '../../contacts/services/sc-contacts.service';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScIContactOnDataCreate } from '../../user/dto/sc-i-contact-on-data-create';\nimport { ScIContactWithRelations } from '../../user/dto/sc-i-contact-with-relations';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum } from '../../user-metrika/enums/sc-user-metrika-goals-enum';\nimport { ScUserMetrikaService } from '../../user-metrika/services/sc-user-metrika.service';\nimport { ScIDeliveryAddress, ScIDeliveryAddressOnDataCreate } from '../dto';\n\n/**\n * Сервис работы с адресами доставки.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScDeliveryAddressService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Сервис для работы с контактными лицами.\n */\n private readonly contactsService: ScContactsService = inject(ScContactsService);\n\n /**\n * {@link BehaviorSubject} обновление адресов доставки.\n */\n private readonly deliveryAddressesUpdate$: BehaviorSubject<void> = new BehaviorSubject<void>(undefined);\n\n /**\n * {@link Observable} данных адресов доставки.\n */\n public readonly deliveryAddresses$: Observable<ScIDeliveryAddress[] | null> = this.deliveryAddressesUpdate$.pipe(\n switchMap(() => this.user$),\n switchMap((user) => (user.isGuest ? of(null) : this.http.get<ScIDeliveryAddress[]>(`${this.urls.apiUrl}/user/delivery-addresses`).pipe(startWith(null)))),\n shareReplay(1)\n );\n\n /**\n * Создаёт запрос создания нового адреса доставки.\n *\n * @param newAddresses Данные нового адреса.\n */\n public createDeliveryAddress$(newAddresses: ScIDeliveryAddressOnDataCreate): Observable<ScIDeliveryAddress> {\n return this.http.post<ScIDeliveryAddress>(`${this.urls.apiUrl}/user/delivery-addresses`, newAddresses).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileDeliveryAddressAdded,\n });\n }),\n tap(() => {\n this.deliveryAddressesUpdate$.next();\n })\n );\n }\n\n /**\n * Создаёт запрос на удаление адреса доставки.\n *\n * @param addressId Идентификатор адреса доставки, который необходимо удалить.\n */\n public deleteDeliveryAddress$(addressId: number): Observable<void> {\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n return this.http.delete<void>(`${this.urls.apiUrl}/user/delivery-addresses/${addressId}`).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileDeliveryAddressDeleted,\n params: { delivery_address_id: addressId },\n });\n }),\n tap(() => {\n this.deliveryAddressesUpdate$.next();\n this.contactsService.deliveryAddressContactsMap.delete(addressId);\n })\n );\n }\n\n /**\n * Создаёт запрос получения списка контактных лиц адреса доставки.\n *\n * @param addressId Идентификатор контрагента.\n */\n public getDeliveryAddressContacts$(addressId: number): Observable<ScIContactWithRelations[] | null> {\n let cachedItem = this.contactsService.deliveryAddressContactsMap.get(addressId);\n\n if (!cachedItem) {\n // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().\n cachedItem = new ScCachedItem(0, this.http.get<ScIContactWithRelations[]>(`${this.urls.apiUrl}/user/delivery-addresses/${addressId}/contacts`));\n this.contactsService.deliveryAddressContactsMap.set(addressId, cachedItem);\n }\n\n return cachedItem.item$;\n }\n\n /**\n * Создаёт запрос создания контактного лица адреса доставки.\n *\n * @param addressId Идентификатор адреса доставки.\n * @param newContact Данные требуемые для создания контактного лица.\n * @returns Возвращает {@link Observable} созданного контактного лица.\n */\n public createDeliveryAddressContact$(addressId: number, newContact: ScIContactOnDataCreate): Observable<ScIContactWithRelations> {\n return this.contactsService.createContact$({ ...newContact, addresses: [{ id: addressId }] });\n }\n\n /**\n * Создаёт запрос удаления контактного лица адреса доставки.\n *\n * @param addressId Идентификатор адреса доставки.\n * @param contactId Идентификатор контактного лица.\n */\n public deleteDeliveryAddressContact$(addressId: number, contactId: number): Observable<void> {\n return this.contactsService.deleteContact$(contactId).pipe(tap(() => this.contactsService.deliveryAddressContactsMap.get(addressId)?.update()));\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, shareReplay } from 'rxjs';\n\nimport { ScIUrls } from '../../config/sc-i-urls';\nimport { ScConvertersService } from '../../converters/services/sc-converters.service';\nimport { ScIPaginate } from '../../pagination/dto/sc-i-paginate';\nimport { SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT } from '../../tokens/sc-is-hidden-error-alert';\nimport { SC_URLS } from '../../tokens/sc-urls';\nimport { ScFaqGroup, ScFaqItem, ScIFrequentlyAskedQuestionsPaginationParams } from '../interfaces';\n\n/**\n * Сервис для работы с часто задаваемыми вопросами (FAQ).\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScFrequentlyAskedQuestionsService {\n /**\n * Сервис для выполнения HTTP-запросов.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок на разделы backend.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * {@link Observable} списка группы часто задаваемых вопросов.\n */\n public readonly groups$: Observable<ScFaqGroup[]> = this.http.get<ScFaqGroup[]>(`${this.urls.apiUrl}/faq/groups`).pipe(shareReplay(1));\n\n /**\n * Создает запрос получения списка часто задаваемых вопросов с пагинацией.\n *\n * @param params Параметры пагинации часто задаваемых вопросов.\n */\n public getFrequentlyAskedQuestions$(params: ScIFrequentlyAskedQuestionsPaginationParams): Observable<ScIPaginate<ScFaqItem>> {\n return this.http.get<ScIPaginate<ScFaqItem>>(`${this.urls.apiUrl}/faq`, {\n params: this.convertersService.toHttpParams({ ...params }, { nonNullable: true }),\n context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,\n });\n }\n}\n","import { ScDocumentInfo } from './sc-document-info';\n\n/**\n * Данные о вложенности файлов или директорий.\n */\nexport class ScDocumentInfoNode {\n /**\n * Элемент файла или директории узла дерева файлов.\n */\n public item: ScDocumentInfo;\n\n /**\n * Вложенные файлы узла дерева файлов.\n */\n // eslint-disable-next-line no-use-before-define\n public files: ScDocumentInfoNode[];\n\n /**\n * Признак, что директория загружена.\n */\n public isLoaded: boolean;\n\n /**\n * Инициализирует экземпляр класса {@link ScDocumentInfoNode}.\n *\n * @param item Данные о файле или директории.\n */\n public constructor(item: ScDocumentInfo) {\n this.item = item;\n this.files = [];\n this.isLoaded = false;\n }\n}\n","/**\n * Перечисление типов записи о файле/директории.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScDocumentInfoTypesEnum {\n /**\n * Директория.\n */\n // eslint-disable-next-line unicorn/prevent-abbreviations\n dir = 'dir',\n\n /**\n * Файл.\n */\n file = 'file',\n\n /**\n * Ссылка на файл или видео со стороннего ресурса.\n */\n link = 'link',\n}\n","/**\n * Перечисление типов значков для вставки в тэг <i>.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScIconTypesEnum {\n /**\n * Иконка директории.\n */\n iconFolder = 'icon-folder',\n\n /**\n * Иконка ссылки.\n */\n iconLink = 'icon-link',\n\n /**\n * Иконка excel-файла.\n */\n iconExcelFile = 'icon-excel-file',\n\n /**\n * Иконка pdf-файла.\n */\n iconPdfFile = 'icon-pdf-file',\n\n /**\n * Иконка word-файла.\n */\n iconWordFile = 'icon-word-file',\n\n /**\n * Иконка файла изобажения.\n */\n iconImage = 'icon-image',\n\n /**\n * Иконка файла.\n */\n iconFile = 'icon-file',\n}\n","/* eslint-disable no-param-reassign */\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { ScDocumentInfo } from '../classes/sc-document-info';\nimport { ScDocumentInfoTypesEnum } from '../enums/sc-document-info-types-enum';\nimport { ScIconTypesEnum } from '../enums/sc-icon-types-enum';\n\n/**\n * Сервис получения информации о файлах и документах.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScFilesService {\n /**\n * Инициализирует экземпляр класса {@link ScFilesService}.\n *\n * @param http HTTP-клиент для выполнения запросов.\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(\n private http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls\n ) {}\n\n /**\n * Создает запрос получения списка файлов и/или директорий.\n * Возвращает содержимое корневой директории, если идентификатор не указан.\n *\n * @param directoryId Идентификатор записи директории, файлы которой необходимо получить.\n */\n public getFiles(directoryId?: number): Observable<ScDocumentInfo[]> {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return this.http.get<ScDocumentInfo[]>(`${this.urls.apiUrl}/files/${[directoryId]}`).pipe(\n tap((data) => {\n data.forEach((item) => {\n this.preProcessesData(item);\n });\n })\n );\n }\n\n /**\n * Обрабатывает данные после загрузки.\n *\n * @param document Данные о файле или директории.\n */\n // eslint-disable-next-line class-methods-use-this\n private preProcessesData(document: ScDocumentInfo): void {\n if (document.type === ScDocumentInfoTypesEnum.file) {\n document.fileFormat = document.link?.split('.').pop()?.toLowerCase();\n }\n\n switch (document.fileFormat ?? document.type) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n case ScDocumentInfoTypesEnum.dir:\n document.icon = ScIconTypesEnum.iconFolder;\n break;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n case ScDocumentInfoTypesEnum.link:\n document.icon = ScIconTypesEnum.iconLink;\n break;\n\n case 'xlsx':\n case 'xls':\n case 'csv':\n document.icon = ScIconTypesEnum.iconExcelFile;\n break;\n\n case 'pdf':\n document.icon = ScIconTypesEnum.iconPdfFile;\n break;\n\n case 'doc':\n case 'docx':\n document.icon = ScIconTypesEnum.iconWordFile;\n break;\n\n case 'jpeg':\n case 'jpg':\n case 'png':\n case 'gif':\n case 'bmp':\n case 'tiff':\n document.icon = ScIconTypesEnum.iconImage;\n break;\n\n default:\n document.icon = ScIconTypesEnum.iconFile;\n break;\n }\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, UrlTree } from '@angular/router';\nimport { concatMap, first, map, Observable, of } from 'rxjs';\n\nimport { ScAuthService } from '../auth';\nimport { SC_AUTH_AS_CLIENT_OPTIONS, ScAuthAsClientOptions } from '../tokens/notification-options';\n\n/**\n * Сервис аутентификации пользователя на основе ключей, переданных в параметрах запроса.\n */\n@Injectable()\nexport class ScAuthAsClientGuard {\n /**\n * Инициализирует экземпляр класса {@link AuthAsClientGuard}.\n *\n * @param authService Сервис аутентификации.\n * @param router Сервис маршрутизации.\n * @param options Параметры авторизации под клиентом.\n */\n public constructor(\n private authService: ScAuthService,\n private router: Router,\n @Inject(SC_AUTH_AS_CLIENT_OPTIONS)\n protected readonly options: ScAuthAsClientOptions\n ) {}\n\n /**\n * Разрешает/запрещает доступ к маршруту.\n *\n * @param route Данные о текущем маршруте.\n */\n // eslint-disable-next-line sonarjs/function-return-type\n public canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n const expiredAt: Date = new Date();\n expiredAt.setMinutes(new Date().getMinutes() + this.options.expiredAtMinute);\n\n return this.authService.getAuthChange().pipe(\n first(),\n // Если пользователь авторизирован, то завершаем сеанс.\n concatMap((state) => (state ? this.authService.getSignOut$(false) : of(null))),\n // Обновляем полученные ключи, чтобы они перестали действовать. getRefreshTokenObservable() запишет новые ключи в систему, после чего проложение само запросит нового пользователя.\n concatMap(() =>\n this.authService.getRefreshToken$({\n access: {\n token: route.paramMap.get('atoken') ?? '',\n expiredAt: expiredAt,\n },\n refresh: {\n token: route.paramMap.get('rtoken') ?? '',\n expiredAt: expiredAt,\n },\n })\n ),\n first(),\n map(() => this.router.createUrlTree(this.options.urlTree))\n );\n }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { TUI_TRUE_HANDLER, tuiIsPresent } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of } from 'rxjs';\n\nimport { ScCatalogService } from '../catalog';\nimport { SC_ID_OR_SLUG_IN_ROUTE } from '../providers';\n\n/**\n * Страж выполняющий проверку маршрута товара и категории, и редиректа в зависимости от настроек окружения.\n *\n * @param route Сервис предоставляющий доступ к данным о маршруте.\n */\n// eslint-disable-next-line sonarjs/function-return-type\nexport const ScIdOrSlugGuard: CanActivateFn = (route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> | boolean => {\n const { paramMap } = route;\n const categoryIdOrSlug = paramMap.get('categoryIdOrSlug');\n const productIdOrSlug = paramMap.get('productIdOrSlug');\n const idOrSlug: 'id' | 'slug' = inject<'id' | 'slug'>(SC_ID_OR_SLUG_IN_ROUTE);\n const router: Router = inject(Router);\n\n if (categoryIdOrSlug && /^\\d+$/.test(categoryIdOrSlug) !== (idOrSlug === 'id')) {\n return inject(ScCatalogService)\n .getCategoryCached$(categoryIdOrSlug)\n .pipe(\n filter(tuiIsPresent),\n // eslint-disable-next-line security/detect-object-injection\n map((category) => router.createUrlTree(['/catalog', category[idOrSlug]])),\n catchError(() => of(TUI_TRUE_HANDLER()))\n );\n }\n\n if (productIdOrSlug && /^\\d+$/.test(productIdOrSlug) !== (idOrSlug === 'id')) {\n return inject(ScCatalogService)\n .getProductData$(productIdOrSlug)\n .pipe(\n filter(tuiIsPresent),\n // eslint-disable-next-line security/detect-object-injection\n map((product) => router.createUrlTree(['/catalog', 'product', product[idOrSlug]])),\n catchError(() => of(TUI_TRUE_HANDLER()))\n );\n }\n\n return true;\n};\n","import { inject, Pipe, PipeTransform } from '@angular/core';\n\nimport { ScIUrls } from '../config/sc-i-urls';\nimport { SC_PATH_IMAGE_NOT_FOUND, SC_URLS } from '../tokens';\n\n/**\n * Пайп для формирования полного URI изображения на media сервере.\n */\n@Pipe({\n name: 'scMediaImageTransformer',\n standalone: true,\n})\nexport class ScMediaImageTransformerPipe implements PipeTransform {\n /**\n * Список ссылок на разделы backend'a.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Путь до изображения 'Товар не найден'.\n */\n private readonly pathImageNotFound: string = inject(SC_PATH_IMAGE_NOT_FOUND);\n\n /**\n * Формирует полный URI изображения на media сервере.\n *\n * @param image Путь до изображения.\n * @param useDefaultImage Признак использования изображения по умолчанию при отсутствии изображения.\n * @returns Полный URI до изображения или путь до изображения 'Товар не найден' если изображение отсутствует и useDefaultImage = true.\n */\n transform(image: string | undefined | null, useDefaultImage: true): string;\n\n transform(image: string | undefined | null, useDefaultImage?: false): string | undefined;\n\n transform(image: string | undefined | null, useDefaultImage?: boolean): string | undefined {\n if (!image) {\n return useDefaultImage ? this.pathImageNotFound : undefined;\n }\n\n return image.startsWith('/') ? this.urls.imgServerUrl + image : `${this.urls.imgServerUrl}/${image}`;\n }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { ScProduct } from '../catalog/dto';\nimport { ScImage } from '../common/classes/sc-image';\nimport { ScIImage } from '../common/interfaces/sc-i-image';\nimport { ScMediaImageTransformerPipe } from '../pipes/sc-media-image-transformer.pipe';\n\n/**\n * Класс с вспомогательными методами для работы с изображениями.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScImageHelper {\n /**\n * Список ссылок на разделы backend'a.\n */\n private readonly mediaImageTransformerPipe: ScMediaImageTransformerPipe = inject(ScMediaImageTransformerPipe);\n\n /**\n * Возвращает изображение товара по индексу.\n *\n * @param product Позиция товара/услуги.\n * @param imgIndex Индекс изображения в массиве.\n * @returns Возвращает изображение товара по индексу. Возвращает пути до изображения 'Товар не найден' {@link pathImageNotFound} если изображения по индексу не найдено.\n */\n public getImage(product: ScProduct, imgIndex: number = 0): ScIImage {\n return {\n image: this.mediaImageTransformerPipe.transform(product.getImage(imgIndex), true),\n alt: `Изображение товара ${product.name} №${imgIndex + 1}`,\n imageWebp: this.mediaImageTransformerPipe.transform(product.getImageWebp(imgIndex), false),\n };\n }\n\n /**\n * Возвращает превью-изображение товара по индексу.\n *\n * @param product Позиция товара/услуги.\n * @param previewIndex Индекс превью-изображения в массиве.\n * @returns Возвращает превью-изображение товара по индексу. Возвращает основное изображение если превью-изображения по индексу не найдено.\n */\n public getImagePreview(product: ScProduct, previewIndex: number = 0): ScIImage {\n return {\n image: this.mediaImageTransformerPipe.transform(product.getImagePreview(previewIndex) ?? product.getImage(previewIndex), true),\n alt: `Изображение предварительного просмотра товара ${product.name} №${previewIndex + 1}`,\n imageWebp: this.mediaImageTransformerPipe.transform(product.getImagePreviewWebp(previewIndex) ?? product.getImageWebp(previewIndex), false),\n };\n }\n\n /**\n * Возвращает массив изображений товара.\n *\n * @param product Позиция товара/услуги.\n * @param useDefaultImage Признак использования изображения по умолчанию при отсутствии изображений.\n */\n public getProductImageList(product: ScProduct, useDefaultImage: true): ScIImage[];\n\n public getProductImageList(product: ScProduct, useDefaultImage?: false): ScIImage[] | undefined;\n\n public getProductImageList(product: ScProduct, useDefaultImage?: boolean): ScIImage[] | undefined {\n const images = product.images?.filter((image) => image.image).map((_, index) => this.getImage(product, index));\n\n if (images?.length) {\n return images;\n }\n\n if (useDefaultImage) {\n return [new ScImage(this.mediaImageTransformerPipe.transform(undefined, true), `Изображение товара ${product.name} не найдено`)];\n }\n\n return undefined;\n }\n\n /**\n * Возвращает массив превью-изображений товара.\n *\n * @param product Данные о товаре/услуге.\n * @param useDefaultImage Признак использования изображения по умолчанию при отсутствии изображений.\n */\n public getProductImagePreviewList(product: ScProduct, useDefaultImage: true): ScIImage[];\n\n public getProductImagePreviewList(product: ScProduct, useDefaultImage?: false): ScIImage[] | undefined;\n\n public getProductImagePreviewList(product: ScProduct, useDefaultImage?: boolean): ScIImage[] | undefined {\n const images = product.images?.filter((image) => image.preview).map((_, index) => this.getImagePreview(product, index));\n\n if (images?.length) {\n return images;\n }\n\n if (useDefaultImage) {\n return [new ScImage(this.mediaImageTransformerPipe.transform(undefined, true), `Изображение предварительного просмотра товара ${product.name} не найдено`)];\n }\n\n return undefined;\n }\n\n /**\n * Возвращает признак того, что файл является изображением.\n *\n * @param format Формат файла.\n */\n // eslint-disable-next-line class-methods-use-this\n public isImg(format: string): boolean {\n return ['jpeg', 'jpg', 'png', 'gif', 'bmp', 'tiff', 'webp'].includes(format);\n }\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport { ScProduct } from '../catalog';\nimport { SC_LINEAR_VALUES_TOKEN } from '../tokens';\n\n/**\n * Клас-помощник для работы со значениями единиц измерения товара.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScUnitsHelper {\n /**\n * Инициирует экземпляр класса {@link ScUnitsHelper}.\n *\n * @param linearValues Единицы измерения линейной величины.\n */\n public constructor(@Inject(SC_LINEAR_VALUES_TOKEN) public readonly linearValues: string[]) {}\n\n /**\n * Возвращает признак возможности продажи товара на метраж.\n *\n * @param product Товар для которого нужно проверить возможность продажи на метраж.\n */\n public productIsMeasurable(product: ScProduct): boolean {\n return this.linearValues.includes(product.unit);\n }\n\n /**\n * Возвращает кратность количества для товара.\n *\n * @param product Товар для которого нужно вернуть кратность количества.\n */\n public productMultiplicity(product: ScProduct): number {\n return product.minCount && !this.linearValues.includes(product.unit) ? product.minCount : 1;\n }\n\n /**\n * Возвращает значение кратности, для проверки кратности количества товара.\n *\n * @param product Товар для которого нужно вернуть значение кратность.\n */\n public productStepForValidator(product: ScProduct): number {\n return product.ignoreMinCountCheck ? 1 : this.productMultiplicity(product);\n }\n}\n","/**\n * Модель данных настроек кэширования запросов.\n */\nexport class ScCacheSettings {\n /**\n * Признак необходимости кэшировать ответ на запрос.\n */\n public isCached: boolean;\n\n /**\n * Время жизни закэшированного ответа.\n */\n public cacheLifeTime: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScCacheSettings}.\n *\n * @param isCached Признак необходимости кэшировать ответ на запрос.\n * @param cacheLifeTime Время жизни закэшированного ответа.\n */\n public constructor(isCached: boolean, cacheLifeTime: number) {\n this.isCached = isCached;\n this.cacheLifeTime = cacheLifeTime;\n }\n}\n","import { HttpContextToken } from '@angular/common/http';\n\nimport { ScCacheSettings } from '../classes/sc-cache-settings';\n\n/**\n * Токен настроек кэширования запроса.\n */\nexport const SC_CACHE_SETTINGS: HttpContextToken<ScCacheSettings> = new HttpContextToken<ScCacheSettings>(() => new ScCacheSettings(false, 0));\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен списка URL, которые нужно кешировать для гостя.\n */\nexport const SC_GUEST_ENDPOINTS_TOKEN = tuiCreateToken<string[]>([]);\n","import { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен имени параметра, при котором кешируются запросы у гостя.\n */\nexport const SC_GUEST_PARAMETER_NAME_TOKEN = tuiCreateToken<string>('');\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ScTokenService } from '../auth';\nimport { SC_AUTH_ADD_HEADER_REQUIRED, SC_IS_HEADER_REQUIRED } from './tokens';\n\n/**\n * Перехватчик запросов для реализации аутентификации.\n */\n@Injectable()\nexport class ScAuthInterceptor implements HttpInterceptor {\n /**\n * Инициализирует экземпляр класса {@link ScAuthInterceptor}.\n *\n * @param tokenService Сервис ключей аутентификации.\n */\n public constructor(private tokenService: ScTokenService) {}\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.context.get<boolean>(SC_IS_HEADER_REQUIRED) && request.context.get<boolean>(SC_AUTH_ADD_HEADER_REQUIRED)) {\n return next.handle(request.clone(this.tokenService.addAuthHeader(request)));\n }\n\n return next.handle(request);\n }\n}\n","import { HttpResponse } from '@angular/common/http';\n\n/**\n * Модель данных закэшированного {@link HttpResponse}.\n *\n * @internal\n */\nexport class ScCachedResponse<T> {\n /**\n * Время загрузки ответа.\n */\n public loadedAt: Date;\n\n /**\n * Кэшируемый ответ на запрос.\n */\n public response: HttpResponse<T>;\n\n /**\n * Инициализирует экземпляр класса {@link ScCachedResponse}.\n *\n * @param response ответ на запрос, который необходимо закэшировать.\n */\n public constructor(response: HttpResponse<T>) {\n this.loadedAt = new Date();\n this.response = response;\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, of, tap } from 'rxjs';\n\nimport { ScCacheSettings } from './classes';\nimport { ScCachedResponse } from './internal/classes/sc-cached-response';\nimport { SC_CACHE_SETTINGS } from './tokens';\n\n/**\n * Перехватчик запросов для кэширования результатов.\n */\n@Injectable()\nexport class ScCacheInterceptor implements HttpInterceptor {\n /**\n * Коллекция пар ключ-значение для результатов запросов по строке запроса.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private cache: Map<string, ScCachedResponse<any>> = new Map<string, ScCachedResponse<any>>();\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.context.get<ScCacheSettings>(SC_CACHE_SETTINGS).isCached) {\n const cachedResponse = this.cache.get(request.url);\n\n if (cachedResponse && cachedResponse.loadedAt.getTime() > Date.now() - request.context.get<ScCacheSettings>(SC_CACHE_SETTINGS).cacheLifeTime) {\n return of(cachedResponse.response);\n }\n\n return next.handle(request).pipe(\n tap((response) => {\n if (response instanceof HttpResponse) {\n this.cache.set(request.url, new ScCachedResponse(response));\n }\n })\n );\n }\n\n return next.handle(request);\n }\n}\n","/* eslint-disable security/detect-object-injection */\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { catchError, map, Observable, throwError } from 'rxjs';\nimport { objectToCamel, objectToSnake, toSnake } from 'ts-case-convert';\n\nimport { ScIUrls } from '../config';\nimport { SC_URLS } from '../tokens';\n\n/**\n * Перехватчик для конвертации данных.\n */\n@Injectable()\nexport class ScConvertInterceptor implements HttpInterceptor {\n /**\n * Инициализирует экземпляр класса {@link ScConvertInterceptor}.\n *\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(@Inject(SC_URLS) private readonly urls: ScIUrls) {}\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.responseType !== 'json' || !request.url.includes(this.urls.apiUrl)) {\n return next.handle(request);\n }\n\n return next.handle(request.clone({ params: this.httpParamsToSnake(request.params), body: objectToSnake(request.body) })).pipe(\n map((event) => {\n if (event instanceof HttpResponse) {\n return event.clone({\n body: objectToCamel(event.body),\n });\n }\n\n return event;\n }),\n catchError((error: HttpErrorResponse) =>\n throwError(\n () =>\n new HttpErrorResponse({\n error: objectToCamel(error.error),\n headers: error.headers,\n status: error.status,\n statusText: error.statusText,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n url: error.url!,\n })\n )\n )\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n private httpParamsToSnake(params: HttpParams): HttpParams {\n // eslint-disable-next-line unicorn/no-array-reduce\n const newObje = params.keys().reduce((object: Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>, key: string) => {\n const parameter = params.getAll(key);\n\n if (parameter) {\n // eslint-disable-next-line no-param-reassign\n object[toSnake(key)] = parameter;\n }\n\n return object;\n }, {});\n\n return new HttpParams().appendAll(newObje);\n }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, catchError, filter, finalize, first, Observable, of, switchMap, takeUntil, throwError } from 'rxjs';\n\nimport { ScAuthService, ScTokenService } from '../auth';\nimport { ScIApiKeys } from '../config';\nimport { SC_API_KEYS } from '../tokens';\nimport { SC_IS_HEADER_REQUIRED, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED } from './tokens';\n\n/**\n * Перехватчик обработки ошибок запросов.\n */\n@Injectable()\nexport class ScErrorsInterceptor implements HttpInterceptor {\n /**\n * Наблюдаемый признак того, что токен в данный момент обновляется.\n */\n private isTokenRefreshing$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n /**\n * Инициализирует экземпляр класса {@link ScErrorsInterceptor}.\n *\n * @param apiKeys Данные о API ключах.\n * @param tokenService Сервис для работы с ключами аутентификации.\n * @param authService Сервис аутентификации.\n */\n public constructor(\n @Inject(SC_API_KEYS) private readonly apiKeys: ScIApiKeys,\n private readonly tokenService: ScTokenService,\n private readonly authService: ScAuthService\n ) {}\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse) => {\n // TODO: TASK[#4511]: Обработка и вывод ошибок работы с API.\n // eslint-disable-next-line sonarjs/no-small-switch\n switch (error.status) {\n case 401:\n if (request.context.get<boolean>(SC_IS_LOGOUT_REQUEST)) {\n this.tokenService.removeAuthToken();\n\n return of();\n }\n\n if (request.headers.has(this.apiKeys.guestKeyName)) {\n this.tokenService.removeGuestToken();\n\n return of();\n }\n\n if (\n request.context.get<boolean>(SC_IS_HEADER_REQUIRED) &&\n request.headers.has(this.apiKeys.keyName) &&\n !request.context.get<boolean>(SC_IS_REFRESH_REQUIRED)\n ) {\n return this.handle401Error(request, next);\n }\n\n return throwError(() => error);\n default:\n return throwError(() => error);\n }\n })\n );\n }\n\n /**\n * Обработчик 401 ошибки.\n *\n * @param request Запрос, который выдал ошибку.\n * @param next Следующий перехватчик в цепочке перехватчиков.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private handle401Error(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!this.isTokenRefreshing$.getValue()) {\n this.isTokenRefreshing$.next(true);\n\n return this.authService.getRefreshToken$().pipe(\n switchMap(() => {\n this.isTokenRefreshing$.next(false);\n\n return next.handle(request.clone(this.tokenService.addAuthHeader(request)));\n }),\n catchError((error: HttpErrorResponse) => {\n if (error.status === 401) {\n this.tokenService.removeAuthToken();\n\n return of();\n }\n\n return throwError(() => error);\n })\n );\n }\n return this.isTokenRefreshing$.pipe(\n filter((isRefreshing) => !isRefreshing),\n first(), // Для запуска цепочки повторного вызова запросов нужен один сигнал.\n switchMap(() => next.handle(this.tokenService.addAuthHeader(request))),\n finalize(() => {\n this.isTokenRefreshing$.next(false);\n }),\n takeUntil(this.authService.getAuthChange().pipe(filter((state) => !state)))\n );\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ScIAppRelease } from '../config';\nimport { SC_RELEASE } from '../tokens';\nimport { SC_IS_HEADER_REQUIRED } from './tokens';\n\n/**\n * Перехватчик запросов для внедрения опций приложения в заголовок.\n */\n@Injectable()\nexport class ScOptionsInterceptor implements HttpInterceptor {\n /**\n * Заголовки опций приложения.\n */\n private readonly headers: Record<string, string | string[]> = {\n 'APP-VERSION': `${this.release.name} (${this.release.version}, ${this.release.date})`,\n };\n\n /**\n * Инициализирует экземпляр класса {@link ScOptionsInterceptor}.\n *\n * @param release Данные о текущем выпуске приложения.\n */\n public constructor(@Inject(SC_RELEASE) private readonly release: ScIAppRelease) {}\n\n /** @inheritDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.context.get<boolean>(SC_IS_HEADER_REQUIRED)) {\n return next.handle(\n request.clone({\n setHeaders: this.headers,\n })\n );\n }\n\n return next.handle(request);\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { first, Observable, switchMap } from 'rxjs';\n\nimport { ScUser } from '../user/dto/sc-user';\nimport { SC_USER_INFO } from '../user/tokens/sc-user-providers';\nimport { SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN } from './tokens';\n\n/**\n * Перехватчик запросов API для добавления в них параметра при котором кешируются запросы у гостя.\n */\n@Injectable()\nexport class ScGuestInterceptor implements HttpInterceptor {\n /**\n * Список URL которые нужно кешировать для гостя.\n */\n private readonly guestEndpoints: string[] = inject(SC_GUEST_ENDPOINTS_TOKEN);\n\n /**\n * Имя параметра, при котором кешируются запросы у гостя.\n */\n private readonly guestParameterName: string = inject(SC_GUEST_PARAMETER_NAME_TOKEN);\n\n /**\n * Сервис аутентификации пользователей.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /** @inheritDoc */\n public intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n const isGuestEndpoint = this.guestEndpoints.some((endpoint) => request.url.includes(endpoint));\n\n if (!isGuestEndpoint) {\n return next.handle(request);\n }\n\n return this.user$.pipe(\n first(),\n switchMap((user) => (user.isGuest ? next.handle(request.clone({ params: request.params.append(this.guestParameterName, true) })) : next.handle(request)))\n );\n }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { format, isValid, parse } from 'date-fns';\nimport { isArray, isString } from 'lodash-es';\nimport { catchError, Observable, throwError } from 'rxjs';\n\nimport { ScIApiErrorResponse } from '../auth/interfaces';\nimport { ScIDateFormat } from '../config/sc-i-date-format';\nimport { SC_DATE_FORMAT } from '../tokens/sc-date-format';\n\n/**\n * Перехватчик для форматирования дат в ошибках запросов к API.\n */\n@Injectable()\nexport class ScDateFormatInterceptor implements HttpInterceptor {\n /**\n * Формат дат.\n */\n private readonly dateFormats: ScIDateFormat = inject(SC_DATE_FORMAT);\n\n /** @inheritDoc */\n public intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse) => {\n const errorData = error.error as ScIApiErrorResponse;\n this.formatDatesInErrors(errorData);\n return throwError(() => error);\n })\n );\n }\n\n /**\n * Форматирует даты в ошибках запросов к API.\n *\n * @param error Объект с ошибками API.\n */\n private formatDatesInErrors(error: ScIApiErrorResponse): void {\n const { errors, message } = error;\n\n // Форматируем основное сообщение об ошибке\n if (message) {\n // eslint-disable-next-line no-param-reassign\n error.message = this.formatDateInString(message);\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const key in errors) {\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n const fieldErrors = errors[key];\n\n if (isArray(fieldErrors)) {\n fieldErrors.forEach((errorMessage, index) => {\n if (isString(errorMessage)) {\n // eslint-disable-next-line security/detect-object-injection\n fieldErrors[index] = this.formatDateInString(errorMessage);\n }\n });\n }\n }\n }\n }\n\n /**\n * Форматирует даты в строке.\n *\n * @param text Исходная строка.\n */\n private formatDateInString(text: string): string {\n // Ищем даты в формате yyyy-MM-dd HH:mm:ss.\n const dateRegex = /(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})/g;\n\n return text.replaceAll(dateRegex, (match) => {\n try {\n const parsedDate = parse(match, this.dateFormats.api, new Date());\n if (isValid(parsedDate)) {\n return format(parsedDate, this.dateFormats.uiDate);\n }\n } catch {\n // Если не удалось распарсить дату, ничего не делаем.\n }\n return match;\n });\n }\n}\n","/**\n * Перечисление организационно-правовых форм.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScOpfList {\n /**\n * Физическое лицо.\n */\n individual = 1,\n\n /**\n * Индивидуальный предприниматель.\n */\n entrepreneur = 2,\n\n /**\n * Юридическое лицо.\n */\n legal = 3,\n\n /**\n * Юридическое лицо (нерезидент).\n */\n non_resident_legal = 4,\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { ScReferencesService } from '../services/sc-references.service';\n\n/**\n * Перечисление статусов заказа.\n * Ключами являются символьные обозначения (slug) статусов заказа, из запроса {@link ScReferencesService.statuses}\n */\n// eslint-disable-next-line no-shadow\nexport enum ScOrderStateStatus {\n /**\n * Черновик.\n */\n draft = 0,\n\n /**\n * Принято в обработку.\n */\n new = 1,\n\n /**\n * В обработке.\n */\n worked_out = 2,\n\n /**\n * Обрабатывается.\n */\n pending = 3,\n\n /**\n * Отправлено клиенту.\n */\n completed = 4,\n\n /**\n * Отменён.\n */\n declined = 5,\n\n /**\n * Удалён.\n */\n deleted = 6,\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { ScReferencesService } from '../services/sc-references.service';\n\n/**\n * Перечисление статусов отплат заказа.\n * Ключами являются символьные обозначения (slug) статусов отплат заказа, из запроса {@link ScReferencesService.paymentStatuses}\n */\n// eslint-disable-next-line no-shadow\nexport enum ScPaymentStatus {\n /**\n * Данные об оплате отсутствуют.\n */\n none = 0,\n\n /**\n * Пользователю отправлена ссылка на оплату.\n */\n sent_payment_link = 1,\n\n /**\n * Пользователь перешёл на страницу оплаты заказа.\n */\n goto_payment_page = 2,\n\n /**\n * Пользователь успешно оплатил заказ на странице оплаты.\n */\n success_by_user = 3,\n\n /**\n * Во время оплаты заказа пользователем на странице оплаты произошла ошибка, либо пользователь отказался от оплаты.\n */\n error_by_user = 4,\n\n /**\n * Ожидается оплата выставленного счёта.\n */\n paid_waiting = 10,\n\n /**\n * Средства успешно заблокированы.\n */\n paid_authorized = 11,\n\n /**\n * Оплачен.\n */\n paid = 12,\n\n /**\n * Подтверждение оплаты оператором.\n */\n confirmed = 20,\n\n /**\n * Завершение заказа оператором (выдача).\n */\n completed = 30,\n\n /**\n * Оплата отменена.\n */\n cancelled = 40,\n\n /**\n * Оплата отменена пользователем.\n */\n cancelled_by_client = 45,\n\n /**\n * Частичный возврат средств.\n */\n refund_partial = 50,\n\n /**\n * Полный возврат средств.\n */\n refund = 55,\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { ScReferencesService } from '../services/sc-references.service';\n\n/**\n * Перечисление статусов рекламаций.\n * Ключами являются символьные обозначения (slug) статусов заказа, из запроса {@link ScReferencesService.feedbackForm$}\n */\n// eslint-disable-next-line no-shadow\nexport enum ScReclamationStatus {\n /**\n * Получено от клиента.\n */\n initiated = 1,\n\n /**\n * Не хватает информации.\n */\n info_required = 2,\n\n /**\n * Ожидает решения.\n */\n pending = 3,\n\n /**\n * Вынесено решение.\n */\n completed = 4,\n}\n","import { inject, Injectable } from '@angular/core';\nimport { tuiPure } from '@taiga-ui/cdk';\nimport { Observable } from 'rxjs';\n\nimport { ScReferenceName, ScReferencesService } from '../../references';\nimport { ScICity, ScICityWithRegion, ScICityWithRegionAndCountry, ScICountry, ScIRegion, ScIRegionWithCountry } from '../dto';\n\n/**\n * Сервис для получения списков стран, регионов, городов.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScLocationsService {\n /**\n * Сервис справочников.\n */\n private readonly referencesService = inject(ScReferencesService);\n\n /**\n * Создает запрос получения списка стран.\n */\n @tuiPure\n public getCountries$(): Observable<ScICountry[]> {\n return this.referencesService.getReference$<ScICountry[]>(ScReferenceName.country);\n }\n\n /**\n * Создает запрос получения списка регионов указанной страны.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n */\n @tuiPure\n public getRegions$(countryId: number): Observable<ScIRegion[]> {\n return this.referencesService.getReference$<ScIRegion[]>(ScReferenceName.region, { countryId: countryId });\n }\n\n /**\n * Создает запрос получения списка регионов указанной страны с информацией о стране.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n */\n @tuiPure\n public getRegionsWithCountry$(countryId: number): Observable<ScIRegionWithCountry[]> {\n return this.referencesService.getReference$<ScIRegionWithCountry[]>(ScReferenceName.regionWithCountry, { countryId: countryId });\n }\n\n /**\n * Создает запрос получения списка городов указанного региона.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n * @param regionId Идентификатор записи региона {@link regionId}.\n */\n @tuiPure\n public getCities$(countryId: number, regionId: number): Observable<ScICity[]> {\n return this.referencesService.getReference$<ScICity[]>(ScReferenceName.city, { countryId: countryId, regionId: regionId });\n }\n\n /**\n * Создает запрос получения списка городов указанного региона и страны с информацией о регионе.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n * @param regionId Идентификатор записи региона {@link regionId}.\n */\n @tuiPure\n public getCitiesWithRegion$(countryId: number, regionId: number): Observable<ScICityWithRegion[]> {\n return this.referencesService.getReference$<ScICityWithRegion[]>(ScReferenceName.cityWithRegion, { countryId: countryId, regionId: regionId });\n }\n\n /**\n * Создает запрос получения списка городов указанного региона и страны с информацией о регионе и стране.\n *\n * @param countryId Идентификатор записи страны {@link number}.\n * @param regionId Идентификатор записи региона {@link regionId}.\n */\n @tuiPure\n public getCityesWithRegionAndCountry$(countryId: number, regionId: number): Observable<ScICityWithRegionAndCountry[]> {\n return this.referencesService.getReference$<ScICityWithRegionAndCountry[]>(ScReferenceName.cityWithRegionAndCountry, { countryId: countryId, regionId: regionId });\n }\n\n /**\n * Создает запрос получения списка городов указанного региона и страны по поисковому запросу.\n *\n * @param term Поисковый запрос.\n * @param countryId Идентификатор записи страны.\n * @param regionId Идентификатор записи региона.\n */\n @tuiPure\n public getCitiesByTerm$(term: string, countryId?: number, regionId?: number): Observable<ScICityWithRegion[]> {\n return this.referencesService.getReferenceByTerm$<ScICityWithRegion[]>(ScReferenceName.cityWithRegion, term, { countryId: countryId, regionId: regionId });\n }\n\n /**\n * Создает запрос получения информации о городе с информацией о регионе и стране.\n *\n * @param cityId Идентификатор записи города.\n */\n @tuiPure\n public getCityById$(cityId: number): Observable<ScICityWithRegionAndCountry> {\n return this.referencesService.getReferenceById$<ScICityWithRegionAndCountry>(ScReferenceName.cityWithRegionAndCountry, cityId);\n }\n}\n","import { ScSeoResource } from '../../catalog/dto/sc-seo-resource';\nimport { ScINewsDTO } from '../internal/sc-i-news-dto';\n\n/**\n * Модель данных новости.\n */\nexport class ScNews extends ScSeoResource {\n /**\n * Идентификатор новости.\n */\n public id: number;\n\n /**\n * Заголовок новости.\n */\n public subject: string;\n\n /**\n * Дата и время создания новости.\n */\n public createdAt: string;\n\n /**\n * Строка HTML с содержимым новости.\n */\n public text: string;\n\n /**\n * Ссылка на основное изображение новости в формате WebP.\n */\n public imageWebp?: string;\n\n /**\n * Инициализирует экземпляр класса {@link ScCategory}.\n *\n * @param newsDTO Данные для инициализации.\n */\n public constructor(newsDTO: ScINewsDTO) {\n super(newsDTO);\n\n this.id = newsDTO.id;\n this.subject = newsDTO.subject;\n this.image = newsDTO.image;\n this.imageWebp = newsDTO.imageWebp;\n this.createdAt = newsDTO.createdAt;\n this.text = newsDTO.text;\n }\n}\n","/*\n * Публичное API библиотеки бизнес-логики.\n */\n\nexport * from './sc-news';\nexport * from './sc-news-tile';\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Токен, указывающий число записей новостей отображаемых в \"Последние новости\".\n */\nexport const SC_COUNT_LAST_NEWS: InjectionToken<number> = new InjectionToken<number>('countLasNews', {\n providedIn: 'root',\n factory: () => 4,\n});\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map, Observable, shareReplay, switchMap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { ScIPaginate, ScIPaginationParams } from '../../pagination';\nimport { SC_URLS } from '../../tokens';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScNews, ScNewsTile } from '../classes';\nimport { ScINewsDTO } from '../internal/sc-i-news-dto';\nimport { SC_COUNT_LAST_NEWS } from '../tokens/sc-count-last-news';\n\n/**\n * Сервис для получения списка новостей.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScNewsService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Количество последних новостей.\n */\n private readonly countLasNews: number = inject(SC_COUNT_LAST_NEWS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * {@link Observable} получения списка последних новостей.\n */\n private readonly lastNewsList$: Observable<ScIPaginate<ScNewsTile>> = this.user$.pipe(\n switchMap(() => this.http.get<ScIPaginate<ScNewsTile>>(`${this.urls.apiUrl}/news`, { params: { perPage: this.countLasNews } })),\n shareReplay(1) // Подогреваем Observable во избежание повторения запросов получения списка последних новостей.\n );\n\n /**\n * Возвращает {@link Observable} списка новостей с пагинацией.\n *\n * @param params параметры пагинации новостей.\n */\n public getListOfNews$(params: ScIPaginationParams): Observable<ScIPaginate<ScNewsTile>> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n return this.http.get<ScIPaginate<ScNewsTile>>(`${this.urls.apiUrl}/news`, { params: { ...params } });\n }\n\n /**\n * Возвращает {@link Observable} полной информации о новости.\n *\n * @param newsId Идентификатор новости.\n */\n public getNews$(newsId: number): Observable<ScNews> {\n return this.http.get<ScINewsDTO>(`${this.urls.apiUrl}/news/${newsId}`).pipe(map((category) => new ScNews(category)));\n }\n\n /**\n * Возвращает {@link Observable} получения списка последних новостей.\n */\n public getLastNewsList$(): Observable<ScIPaginate<ScNewsTile>> {\n return this.lastNewsList$;\n }\n}\n","/*\n * Публичное API библиотеки бизнес-логики.\n */\n\nexport * from './classes';\nexport * from './services/sc-news.service';\nexport * from './internal/sc-i-news-dto';\nexport * from './tokens/sc-count-last-news';\n","/**\n * Перечисление типов действий для уведомлений.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScNotificationActionTypes {\n /**\n * Переход на страницу рекламации.\n */\n reclamationPage = 'reclamation_page',\n\n /**\n * Переход на страницу заказа.\n */\n orderPage = 'order_page',\n\n /**\n * Переход на страницу новости.\n */\n newsPage = 'news_page',\n\n /**\n * Переход на страницу товара.\n */\n productPage = 'product_page',\n\n /**\n * Переход на страницу онлайн оплаты.\n */\n onlinePayment = 'online_payment',\n}\n","/**\n * Перечисление символьных обозначений уровней уведомлений.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScNotificationLevelNames {\n /**\n * Информационное уведомление.\n */\n info = 'info',\n\n /**\n * Уведомление об успешно выполненном действии.\n */\n success = 'success',\n\n /**\n * Уведомление об ошибке.\n */\n error = 'error',\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { interval, Observable, of, ReplaySubject, switchMap, tap } from 'rxjs';\n\nimport { ScIUpdateInterval, ScIUrls } from '../../config';\nimport { SC_UPDATE_INTERVAL, SC_URLS } from '../../tokens';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScINotificationsCount, ScIUserNotification } from '..';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScNotificationsService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Интервалы обновления данных.\n */\n private readonly updateInterval: ScIUpdateInterval = inject(SC_UPDATE_INTERVAL);\n\n /**\n * {@link ReplaySubject} данных о количестве уведомлений пользователя.\n */\n private readonly notificationsCount$: ReplaySubject<ScINotificationsCount | undefined> = new ReplaySubject<ScINotificationsCount | undefined>(1);\n\n /**\n * {@link ReplaySubject} данных об уведомлениях пользователя.\n */\n private readonly notifications$: ReplaySubject<ScIUserNotification[]> = new ReplaySubject<ScIUserNotification[]>(1);\n\n /**\n * Интервал, через который выполняется запрос уведомлений пользователя.\n */\n private readonly interval$: Observable<number> = interval(this.updateInterval.notificationsUpdate).pipe(\n tap(() => {\n this.updateUserNotificationsCount();\n })\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScNotificationsService}.\n *\n */\n public constructor() {\n this.user$\n .pipe(\n tap((user) => {\n // eslint-disable-next-line sonarjs/no-selector-parameter\n if (user.isGuest) {\n // eslint-disable-next-line unicorn/no-useless-undefined\n this.notificationsCount$.next(undefined);\n } else {\n this.updateUserNotificationsCount();\n }\n }),\n switchMap((user) => (user.isGuest ? of() : this.interval$))\n )\n .subscribe();\n }\n\n /**\n * Обновляет количество уведомлений.\n */\n public updateUserNotificationsCount(): void {\n this.getUserNotificationsCount$()\n .pipe(\n tap((count) => {\n this.setNotificationsCountChange(count);\n })\n )\n .subscribe();\n }\n\n /**\n * Обновляет список уведомлений.\n */\n public updateUserNotifications(): void {\n this.getUserNotifications$()\n .pipe(\n tap((notificationsList) => {\n this.setNotificationsChange(notificationsList);\n })\n )\n .subscribe();\n }\n\n /**\n * Обновляет количество и список уведомлений.\n */\n public updateNotificationsListAndCount$(): Observable<ScIUserNotification[]> {\n return this.getUserNotificationsCount$().pipe(\n tap((count) => {\n this.setNotificationsCountChange(count);\n }),\n switchMap(() => this.getUserNotifications$()),\n tap((notificationsList) => {\n this.setNotificationsChange(notificationsList);\n })\n );\n }\n\n /**\n * Создает запрос получения списка уведомлений.\n */\n public getUserNotifications$(): Observable<ScIUserNotification[]> {\n return this.http.get<ScIUserNotification[]>(`${this.urls.apiUrl}/user/notifications`);\n }\n\n /**\n * Создает запрос получения количества уведомлений.\n */\n public getUserNotificationsCount$(): Observable<ScINotificationsCount> {\n return this.http.get<ScINotificationsCount>(`${this.urls.apiUrl}/user/notifications/count`);\n }\n\n /**\n * Создает запрос на удаление всех уведомлений.\n */\n public deleteAllNotifications$(): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/user/notifications`);\n }\n\n /**\n * Создает запрос на прочтение всех уведомлений.\n */\n public readAllNotifications$(): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/user/notifications`, {});\n }\n\n /**\n * Создает запрос на удаление уведомления по идентификатору.\n *\n * @param notificationId Идентификатор уведомления, которое необходимо удалить.\n */\n public deleteNotificationById$(notificationId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/user/notifications/${notificationId}`);\n }\n\n /**\n * Создает запрос на прочтение уведомления по идентификатору.\n *\n * @param notificationId Идентификатор уведомления, которое необходимо пометить прочитанным.\n */\n public readNotificationById$(notificationId: number): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/user/notifications/${notificationId}`, {});\n }\n\n /**\n * Возвращает {@link Observable} количества уведомлений пользователя.\n */\n public getNotificationsCountChange$(): Observable<ScINotificationsCount | undefined> {\n return this.notificationsCount$.asObservable();\n }\n\n /**\n * Возвращает {@link Observable} списка уведомлений пользователя.\n */\n public getNotificationsChange$(): Observable<ScIUserNotification[]> {\n return this.notifications$.asObservable();\n }\n\n /**\n * Устанавливает {@link Observable} количества уведомлений пользователя.\n *\n * @param notificationsCount Данные о количестве уведомлений.\n */\n private setNotificationsCountChange(notificationsCount: ScINotificationsCount | undefined): void {\n this.notificationsCount$.next(notificationsCount);\n }\n\n /**\n * Устанавливает {@link Observable} списка уведомлений пользователя.\n *\n * @param notifications Данные о списке уведомлений.\n */\n private setNotificationsChange(notifications: ScIUserNotification[]): void {\n this.notifications$.next(notifications);\n }\n}\n","import { ScIDeliveryCostDTO } from '../internal';\n\n/**\n * Модель данных о бесплатной доставке.\n */\nexport class ScDeliveryCost {\n /**\n * Данные о бесплатной доставке.\n */\n public freeShippingTerms?: {\n /**\n * Минимальная сумма бесплатной доставки.\n */\n minOrdersSum: number;\n\n /**\n * Общая сумма всех текущих заказов и корзины.\n */\n currentOrdersSum: number;\n };\n\n /**\n * Сформированное сообщение с данными о доставке.\n */\n public message: string | null;\n\n /**\n * Сформированное сообщение об ошибке.\n */\n public errorMessage?: string;\n\n /**\n * Инициализирует экземпляр класса {@link ScDeliveryCost}.\n *\n * @param deliveryCost DTO данных о бесплатной доставке.\n * @param deliveryDate Дата доставки.\n */\n public constructor(deliveryCost: ScIDeliveryCostDTO, deliveryDate: string) {\n if (deliveryCost.freeShippingTerms?.minOrdersSum !== undefined && deliveryCost.freeShippingTerms.currentOrdersSum !== undefined) {\n this.freeShippingTerms = { minOrdersSum: deliveryCost.freeShippingTerms.minOrdersSum, currentOrdersSum: deliveryCost.freeShippingTerms.currentOrdersSum };\n this.message = `Для оформления бесплатной доставки сумма заказов на ${deliveryDate} должна быть более ${this.freeShippingTerms.minOrdersSum.toLocaleString()} руб.<br>\n Текущая сумма заказов составляет ${this.freeShippingTerms.currentOrdersSum.toLocaleString()} руб`;\n }\n }\n}\n","/**\n * Перечисление типов доставки заказа.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScDeliveryType {\n /**\n * Самовывоз.\n */\n self_delivery = 1,\n\n /**\n * Доставка.\n */\n delivery = 2,\n}\n","/**\n * Перечисление типов отплат заказа.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScPaymentType {\n /**\n * Оплата наличными.\n */\n nal = 1,\n\n /**\n * Онлайн оплата.\n */\n online = 2,\n\n /**\n * Безналичный расчёт (без НДС).\n */\n beznal = 3,\n\n /**\n * Безналичный расчёт (с НДС).\n */\n beznal2 = 4,\n\n /**\n * Банковская карта.\n */\n terminal = 5,\n\n /**\n * Оплата через систему быстрых платежей.\n */\n sbp = 6,\n}\n","import { ScCartItem } from '../../cart/dto/sc-cart-item';\nimport { ScContragent } from '../../contragent/dto/sc-contragent';\nimport { ScOrderStateStatus } from '../../references/enums/sc-order-state-status';\nimport { ScPaymentStatus } from '../../references/enums/sc-payment-status';\nimport { ScDeliveryType, ScPaymentType } from '../enums';\nimport { ScIOrderDTO } from '../internal/sc-i-order-dto';\nimport { ScIOrderDelivery } from './sc-order-delivery';\nimport { ScIOrderHistory } from './sc-order-history';\nimport { ScIOrderPayment } from './sc-order-payment';\nimport { ScOrderShort } from './sc-order-short';\n\n/**\n * Полная информация о заказе.\n */\nexport class ScOrder {\n /**\n * Идентификатор записи заказа.\n */\n public id: number;\n\n /**\n * Дата и время создания заказа.\n */\n public createdAt: string;\n\n /**\n * Идентификатор статуса.\n */\n public status: ScOrderStateStatus;\n\n /**\n * Направление продаж.\n */\n public direction: number;\n\n /**\n * Данные об оплате заказа.\n */\n public payment: ScIOrderPayment;\n\n /**\n * Сумма заказа.\n */\n public sum: number;\n\n /**\n * Список продуктов заказа.\n */\n public products?: ScCartItem[];\n\n /**\n * Список записей истории изменения статусов заказа.\n */\n public history?: ScIOrderHistory[];\n\n /**\n * Список счетов заказа.\n */\n public invoices?: string[];\n\n /**\n * Комментарий клиента к заказу.\n */\n public comment?: string;\n\n /**\n * Изображение, прикрепленное к заказу клиентом во время создания.\n */\n public image?: string;\n\n /**\n * Данные о доставке заказа.\n */\n public delivery: ScIOrderDelivery;\n\n /**\n * Данные о контрагенте клиента.\n */\n public contragent?: ScContragent;\n\n /**\n * Закрепленный за заказом пользователь.\n */\n public attachedUser?: {\n /**\n * Тип пользователя.\n */\n type: string;\n\n /**\n * ФИО пользователя.\n */\n name: string;\n\n /**\n * Номер телефона. В формате \"79203436527\" или \"+79203436527\".\n */\n phone: string;\n\n /**\n * Адрес электронной почты.\n */\n email: string;\n };\n\n /**\n * Номер документа в учетной системе клиента.\n */\n public numberDoc?: number;\n\n /**\n * Штрих-код заказа.\n */\n public barcode?: number;\n\n /**\n * Дата последнего обновления статуса и информации об оплате.\n */\n public lastUpdateDate: Date;\n\n /**\n * Инициализирует экземпляр класса {@link ScOrder}.\n *\n * @param orderDTO DTO полная информация о заказе.\n */\n public constructor(orderDTO: ScIOrderDTO) {\n this.id = orderDTO.id;\n this.createdAt = orderDTO.createdAt;\n this.status = orderDTO.status;\n this.direction = orderDTO.direction;\n this.payment = orderDTO.payment;\n this.sum = orderDTO.sum;\n this.products = orderDTO.products?.map((productDTO) => new ScCartItem(productDTO));\n this.history = orderDTO.history;\n this.invoices = orderDTO.invoices;\n this.comment = orderDTO.comment;\n this.image = orderDTO.image;\n this.delivery = orderDTO.delivery;\n this.contragent = orderDTO.contragent;\n this.attachedUser = orderDTO.attachedUser;\n this.numberDoc = orderDTO.numberDoc;\n this.barcode = orderDTO.barcode;\n this.lastUpdateDate = new Date();\n }\n\n /**\n * Тип оплаты.\n */\n public get paymentType(): ScPaymentType {\n return this.payment.type;\n }\n\n /**\n * Тип доставки.\n */\n public get deliveryType(): ScDeliveryType {\n return this.delivery.type;\n }\n\n /**\n * Признак, что заказ можно оплатить online.\n */\n public get isPayable(): boolean {\n return (\n [ScOrderStateStatus.new, ScOrderStateStatus.worked_out, ScOrderStateStatus.pending].includes(this.status) &&\n this.payment.type === ScPaymentType.online &&\n this.payment.status !== undefined &&\n [ScPaymentStatus.none, ScPaymentStatus.sent_payment_link, ScPaymentStatus.goto_payment_page, ScPaymentStatus.error_by_user].includes(this.payment.status) &&\n this.payment.onlinePaymentLink !== undefined\n );\n }\n\n /**\n * Признак черновика заказа.\n */\n public get isDraft(): boolean {\n return this.status === ScOrderStateStatus.draft;\n }\n\n /**\n * Признак, что заказ будет подлежать online-оплате.\n */\n public get isPayableSoon(): boolean {\n return (\n ![ScOrderStateStatus.draft, ScOrderStateStatus.declined, ScOrderStateStatus.deleted, ScOrderStateStatus.completed].includes(this.status) &&\n !this.isPayable &&\n this.payment.type === ScPaymentType.online\n );\n }\n\n /**\n * Признак, что заказ завершён.\n */\n public get isCompleted(): boolean {\n return [ScOrderStateStatus.completed, ScOrderStateStatus.declined, ScOrderStateStatus.deleted].includes(this.status);\n }\n\n /**\n * Признак нового заказа.\n */\n public get isNew(): boolean {\n return this.status === ScOrderStateStatus.new;\n }\n\n /**\n * Возвращает сумму заказа в виде строки. Если стоимость отсутствует, то вернёт '-'.\n */\n public getSumStr(): string {\n return this.sum > 0 ? `${this.sum.toLocaleString()} ₽` : '-';\n }\n\n /**\n * Возвращает сообщение о необходимости уточнить сумму заказа или пустую строку.\n */\n public getSumMessage(): string {\n return this.sum === 0 ? 'Цена требует уточнения' : '';\n }\n\n /**\n * Возвращает признак того, что срок жизни информации о заказе не истёк.\n *\n * @param orderLifeTime Срок жизни данных в ms.\n */\n public cachedDataIsActual(orderLifeTime: number): boolean {\n return this.lastUpdateDate.getTime() >= Date.now() - orderLifeTime;\n }\n\n /**\n * Обновляет данные полного заказа.\n *\n * @param order Полная информация о заказе.\n */\n public updateData(order: ScOrder): void {\n this.status = order.status;\n this.direction = order.direction;\n this.payment = order.payment;\n this.sum = order.sum;\n this.products = order.products;\n this.history = order.history;\n this.invoices = order.invoices;\n this.comment = order.comment;\n this.image = order.image;\n this.delivery = order.delivery;\n this.contragent = order.contragent;\n this.attachedUser = order.attachedUser;\n this.lastUpdateDate = new Date();\n }\n\n /**\n * Обновляет данные полного заказа данными краткой информации о заказе. Не обновляете дату последнего обновления.\n *\n * @param order Краткая информация о заказе.\n */\n public updateDataFromShortOrder(order: ScOrderShort): void {\n this.status = order.status;\n this.direction = order.direction;\n this.payment = order.payment;\n this.sum = order.sum;\n this.delivery.type = order.deliveryType;\n }\n}\n","import { ScOrderStateStatus } from '../../references';\nimport { ScDeliveryType } from '../enums';\nimport { ScIOrderShortDTO } from '../internal/sc-i-order-short-dto';\nimport { ScIOrderPayment } from './sc-order-payment';\n\n/**\n * Краткая информация о заказе.\n */\nexport class ScOrderShort {\n /**\n * Идентификатор записи заказа.\n */\n public id: number;\n\n /**\n * Дата и время создания заказа.\n */\n public createdAt: string;\n\n /**\n * Идентификатор статуса.\n */\n public status: ScOrderStateStatus;\n\n /**\n * Направление продаж.\n */\n public direction: number;\n\n /**\n * Данные об оплате заказа.\n */\n public payment: ScIOrderPayment;\n\n /**\n * Тип доставки.\n */\n public deliveryType: ScDeliveryType;\n\n /**\n * Сумма заказа.\n */\n public sum: number;\n\n /**\n * Номер документа в учетной системе клиента.\n */\n public numberDoc?: number;\n\n /**\n * Штрих-код заказа.\n */\n public barcode?: number;\n\n /**\n * Инициализирует экземпляр класса {@link ScIOrderShortDTO}.\n *\n * @param orderDTO DTO Краткая информация о заказе.\n */\n public constructor(orderDTO: ScIOrderShortDTO) {\n this.id = orderDTO.id;\n this.createdAt = orderDTO.createdAt;\n this.status = orderDTO.status;\n this.direction = orderDTO.direction;\n this.payment = orderDTO.payment;\n this.deliveryType = orderDTO.deliveryType;\n this.sum = orderDTO.sum;\n this.numberDoc = orderDTO.numberDoc;\n this.barcode = orderDTO.barcode;\n }\n\n /**\n * Возвращает сумму заказа в виде строки. Если стоимость отсутствует, то вернёт '-'.\n */\n public getSumStr(): string {\n return this.sum > 0 ? `${this.sum.toLocaleString()} ₽` : '-';\n }\n\n /**\n * Возвращает сообщение о необходимости уточнить сумму заказа или пустую строку.\n */\n public getSumMessage(): string {\n return this.sum === 0 ? 'Цена требует уточнения' : '';\n }\n\n /**\n * Обновляет данные заказа.\n *\n * @param order Краткая информация о заказе.\n */\n public updateData(order: ScOrderShort): void {\n this.status = order.status;\n this.direction = order.direction;\n this.payment = order.payment;\n this.sum = order.sum;\n this.deliveryType = order.deliveryType;\n }\n}\n","/* eslint-disable no-param-reassign */\n\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { format, parse } from 'date-fns';\nimport { filter, map, Observable, of, switchMap, tap } from 'rxjs';\n\nimport { ScCart, ScCartService } from '../../cart';\nimport { ScIDateFormat, ScIUpdateInterval, ScIUrls } from '../../config';\nimport { ScIPaginate } from '../../pagination';\nimport { SC_DATE_FORMAT, SC_UPDATE_INTERVAL, SC_URLS } from '../../tokens';\nimport { ScUIService } from '../../ui';\nimport { ScUser } from '../../user/dto/sc-user';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { ScDeliveryCost, ScINewOrder, ScINewOrderFromDraft, ScOrder, ScOrderShort } from '../dto';\nimport { ScIDeliveryCostDTO, ScIOrderDTO, ScIOrderShortDTO } from '../internal';\n\n/**\n * Сервис для работы с заказами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScOrdersService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Интервалы обновления данных.\n */\n private readonly updateInterval: ScIUpdateInterval = inject(SC_UPDATE_INTERVAL);\n\n /**\n * Сервис для работы с корзиной.\n */\n private readonly cartService: ScCartService = inject(ScCartService);\n\n /**\n * Сервис для работы с UI.\n */\n private readonly uiService: ScUIService = inject(ScUIService);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Коллекция пар ключ-значение для заказов пользователя.\n */\n private readonly idOrderMap: Map<number, ScOrder> = new Map<number, ScOrder>();\n\n /**\n * Формат дат.\n */\n private readonly dateFormats: ScIDateFormat = inject(SC_DATE_FORMAT);\n\n /**\n * Инициализирует экземпляр класса {@link ScOrdersService}.\n */\n public constructor() {\n this.user$.pipe(filter((user) => user.isGuest)).subscribe(() => {\n this.idOrderMap.clear();\n });\n }\n\n /**\n * Создаёт запрос нового заказа по указанному направлению продаж.\n *\n * @param directionId Идентификатор направления продаж.\n * @param newOrder Данные нового заказа.\n */\n public createOrder$(directionId: number, newOrder: ScINewOrder): Observable<ScOrderShort[]> {\n return this.http.post<ScIOrderShortDTO[]>(`${this.urls.apiUrl}/orders/${directionId}`, newOrder).pipe(\n map((orders) => orders.map((item) => new ScOrderShort(item))),\n tap((orders: ScOrderShort[]) => {\n orders.forEach((order) => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderCreated,\n params: { order_id: order.id },\n });\n });\n }),\n tap(() => {\n this.uiService.removeNewOrderMetadata(directionId);\n })\n );\n }\n\n /**\n * Возвращает список доступных дат доставки для указанного адреса.\n *\n * @param addressId Идентификатор адреса доставки контрагента клиента.\n */\n public getDeliveriesData$(addressId: number): Observable<string[]> {\n return this.http.get<string[]>(`${this.urls.apiUrl}/orders/delivery/${addressId}/nearest-dates`);\n }\n\n /**\n * Возвращает список доступных дат самовывоза для указанного склада.\n *\n * @param warehouseId Идентификатор склада.\n */\n public getSelfDeliveriesData$(warehouseId: number): Observable<string[]> {\n return this.http.get<string[]>(`${this.urls.apiUrl}/orders/self-delivery/${warehouseId}/nearest-dates`);\n }\n\n /**\n * Возвращает список заказов с пагинацией.\n *\n * @param params Параметры запроса получения заказов.\n */\n public getOrders$(params: HttpParams): Observable<ScIPaginate<ScOrderShort>> {\n return this.http.get<ScIPaginate<ScIOrderShortDTO>>(`${this.urls.apiUrl}/orders`, { params: params }).pipe(\n map((ordersPaginateDTO) => {\n ordersPaginateDTO.data = ordersPaginateDTO.data.map((item) => new ScOrderShort(item));\n\n return ordersPaginateDTO as ScIPaginate<ScOrderShort>;\n }),\n tap((ordersPaginate) => {\n this.idOrderMap.forEach((order) => {\n if (order.cachedDataIsActual(this.updateInterval.orderData)) {\n const findOrder = ordersPaginate.data.find((item) => item.id === order.id);\n\n if (findOrder) {\n order.updateDataFromShortOrder(findOrder);\n }\n }\n });\n })\n );\n }\n\n /**\n * Возвращает полную информацию о заказе.\n *\n * @param orderId Идентификатор заказа.\n * @param cacheable Признак возможности получения заказа из кэшированных данных.\n */\n public getOrder$(orderId: number, cacheable: boolean = true): Observable<ScOrder> {\n const orderMap = this.idOrderMap.get(orderId);\n\n if (cacheable && orderMap?.cachedDataIsActual(this.updateInterval.orderData)) {\n return of(orderMap);\n }\n\n return this.http.get<ScIOrderDTO>(`${this.urls.apiUrl}/orders/${orderId}`).pipe(\n map((orderDTO) => new ScOrder(orderDTO)),\n switchMap((order) =>\n this.cartService.getCartChange$().pipe(\n map((cart) => {\n order.products?.map((product) => {\n product.product.cartItem = cart.items.find((item) => item.product.id === product.product.id);\n\n return product;\n });\n\n return order;\n })\n )\n ),\n tap((order) => this.idOrderMap.set(order.id, order))\n );\n }\n\n /**\n * Копирует товары заказа в корзину текущего пользователя.\n *\n * @param orderId Идентификатор заказа.\n */\n public clone$(orderId: number): Observable<ScCart> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/orders/${orderId}/clone`, {}).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderCloned,\n params: { order_id: orderId },\n });\n }),\n switchMap(() => this.cartService.updateCart$())\n );\n }\n\n /**\n * Отменяет заказ.\n *\n * @param orderId Идентификатор заказа.\n */\n public cancel$(orderId: number): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/orders/${orderId}/cancel`, {}).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderCancelled,\n params: { order_id: orderId },\n });\n })\n );\n }\n\n /**\n * Создаёт запрос нового заказа из заказа черновика.\n *\n * @param orderId Идентификатор заказа черновика.\n * @param newOrder Данные нового заказа.\n */\n public createOrderByDraft$(orderId: number, newOrder: ScINewOrderFromDraft): Observable<ScOrderShort[]> {\n return this.http.post<ScIOrderShortDTO[]>(`${this.urls.apiUrl}/orders/${orderId}/draft`, newOrder).pipe(\n map((orders) => orders.map((item) => new ScOrderShort(item))),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderCreatedFromDraft,\n params: { order_id: orderId },\n });\n }),\n tap(() => this.idOrderMap.delete(orderId))\n );\n }\n\n /**\n * Создаёт запрос на удаление заказа черновика.\n *\n * @param orderId Идентификатор заказа черновика.\n */\n public deleteDraftOrder$(orderId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/orders/${orderId}/draft`).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.orderDeleted,\n params: { order_id: orderId, is_draft: true },\n });\n }),\n tap(() => this.idOrderMap.delete(orderId))\n );\n }\n\n /**\n * Возвращает информацию о стоимости доставки.\n *\n * @param addressId Идентификатор адреса доставки контрагента клиента.\n * @param warehouseId Идентификатор склада.\n * @param date Дата доставки.\n */\n public getDeliveryCost$(addressId: number, warehouseId: number, date: string): Observable<ScDeliveryCost> {\n return this.http\n .get<ScIDeliveryCostDTO>(`${this.urls.apiUrl}/orders/delivery/${addressId}/cost`, {\n params: {\n warehouse_id: warehouseId,\n date: date,\n },\n })\n .pipe(\n map((ordersPaginateDTO) => {\n const formattedDate = format(parse(date, this.dateFormats.api, new Date()), this.dateFormats.uiDate);\n\n return new ScDeliveryCost(ordersPaginateDTO, formattedDate);\n })\n );\n }\n}\n","import { EventEmitter, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { BehaviorSubject, concatMap, debounceTime, filter, map, Observable, scan, share, startWith, switchMap, takeWhile } from 'rxjs';\n\nimport { ScCatalogService, ScProduct } from '../../catalog';\nimport { SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS } from '../../providers/sc-product-pagination-options';\nimport { SC_USER_INFO } from '../../user/tokens/sc-user-providers';\nimport { ScIPaginate, ScIPaginationParams } from '../dto';\n\n/**\n * Сервис пагинации.\n */\n@Injectable()\nexport class ScPaginationService<P extends ScIPaginationParams, O extends object = Omit<P, keyof ScIPaginationParams>> {\n /**\n * {@link BehaviorSubject} изменения данных о странице пагинации.\n */\n private readonly page$: BehaviorSubject<ScIPaginationParams> = new BehaviorSubject<ScIPaginationParams>(SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS);\n\n /**\n * {@link BehaviorSubject} изменения оставшихся данных пагинации без данных о странице пагинации.\n */\n private readonly others$: BehaviorSubject<O | undefined> = new BehaviorSubject<O | undefined>(undefined);\n\n /**\n * {@link EventEmitter} события нажатия на кнопку (следующие товары).\n */\n public readonly nextPageClickEvent: EventEmitter<void> = inject(SC_NEXT_PAGE_PAGINATION_CLICK);\n\n /**\n * {@link Observable} изменения статуса аутентификации.\n */\n public authStatus$ = inject(SC_USER_INFO).pipe(map((user) => user.isGuest));\n\n /**\n * Сервис работы с каталогом.\n */\n public catalogService = inject(ScCatalogService);\n\n /**\n * Объект данных пагинации.\n */\n public data$: Observable<ScIPaginate<ScProduct> | null> = this.others$.pipe(\n filter(tuiIsPresent),\n switchMap((params) =>\n this.page$.pipe(\n filter(tuiIsPresent),\n // Избегаем множественных сигналов при одновременном изменении фильтров page$ и others$.\n debounceTime(0),\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n map((page) => ({ ...params, ...page })),\n // TODO: Заменить this.catalogService.getProducts$ на абстрактный метод сервиса по примеру `TuiTreeLoader`.\n switchMap((paginationParams) => this.authStatus$.pipe(switchMap(() => this.catalogService.getProducts$(paginationParams).pipe(startWith(null)))))\n )\n ),\n share()\n );\n\n /**\n * Объект данных пагинации с сохранением предыдущих значений для \"разворачивания\" списка товаров.\n * Список сохраняется при переходе по страницам, до тех пор пока не будет получен сигнал `others$`.\n */\n public dataAccumulated$: Observable<ScIPaginate<ScProduct> | null> = this.others$.pipe(\n filter(tuiIsPresent),\n switchMap((params) => this.authStatus$.pipe(map(() => params))),\n switchMap((params) =>\n this.page$.pipe(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment\n map((page) => ({ ...params, ...page })),\n // TODO: Заменить this.catalogService.getProducts$ на абстрактный метод сервиса по примеру `TuiTreeLoader`.\n concatMap((paginationParams) => this.catalogService.getProducts$(paginationParams).pipe(startWith(null))),\n // TODO: Заменить `ScProduct` на T тип.\n scan<ScIPaginate<ScProduct> | null, [ScIPaginate<ScProduct> | null, ScIPaginate<ScProduct> | null]>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ([_, accumulator], value) => {\n if (!value) {\n return [value, accumulator];\n }\n\n if (accumulator && value.meta.currentPage > 1) {\n value.data.unshift(...accumulator.data);\n }\n\n return [value, value];\n },\n [null, null]\n ),\n map(([paginate]) => paginate),\n takeWhile((paginate) => paginate === null || paginate.meta.currentPage < paginate.meta.lastPage, true)\n )\n ),\n share()\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScPaginationService}.\n */\n public constructor() {\n this.others$\n .pipe(\n filter(tuiIsPresent),\n switchMap(() =>\n this.nextPageClickEvent.pipe(\n scan((accumulator) => accumulator + 1, 1),\n startWith(1)\n )\n ),\n takeUntilDestroyed()\n )\n .subscribe((page) => {\n this.patchPage({ page: page });\n });\n }\n\n /**\n * Полностью обновляет значения страницы пагинации {@link page$}.\n *\n * @param newPageValue Новые данные страницы пагинации.\n */\n public setPage(newPageValue: ScIPaginationParams): void {\n this.page$.next(newPageValue);\n }\n\n /**\n * Частично обновляет значения страницы пагинации {@link page$}.\n *\n * @param partialPageValue Новые данные страницы пагинации. Можно передать часть данных.\n */\n public patchPage(partialPageValue: Partial<ScIPaginationParams>): void {\n // Значения по умолчанию.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const currentPage = this.page$.value;\n\n // Обновляем только те поля, которые переданы в partialPageValue.\n const updatedPage: ScIPaginationParams = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment\n page: partialPageValue.page ?? currentPage.page,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment\n perPage: partialPageValue.perPage ?? currentPage.perPage,\n };\n\n this.page$.next(updatedPage);\n }\n\n /**\n * Полностью обновляет остальные параметры пагинации {@link others$}.\n *\n * @param newOthersValue Новые параметры пагинации.\n */\n public setOthers(newOthersValue: O): void {\n this.others$.next(newOthersValue);\n }\n\n /**\n * Частично обновляет остальные параметры пагинации {@link others$}.\n *\n * @param partialOthersValue Новые параметры пагинации. Можно передать часть данных.\n */\n public patchOthers(partialOthersValue: Partial<O>): void {\n const currentOthers = this.others$.value ?? ({} as O);\n\n // Избегаем обновления, если partialOthersValue пустой.\n if (Object.keys(partialOthersValue).length > 0) {\n const updatedOthers: O = { ...currentOthers, ...partialOthersValue };\n this.others$.next(updatedOthers);\n }\n }\n\n /**\n * Обновляет все данные пагинации {@link page$} и {@link others$}.\n *\n * @param newValue Новые параметры пагинации для {@link page$} и {@link others$}.\n */\n public setPaginationParams(newValue: P): void {\n // Обновляем значение page$.\n this.page$.next({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n page: newValue.page,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n perPage: newValue.perPage,\n });\n\n // Обновляем значение others$.\n const othersValue = this.extractOthers(newValue);\n this.others$.next(othersValue);\n }\n\n /**\n * Выделяет параметры пагинации, не относящиеся к странице пагинации {@link O} из полного объекта параметров пагинации {@link P}.\n *\n * @param value Объекты параметров пагинации {@link P}\n */\n // eslint-disable-next-line class-methods-use-this\n private extractOthers(value: P): O {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page, perPage, ...others } = value;\n\n return others as O;\n }\n}\n","/**\n * Перечисление идентификаторов статусов опросника.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScQuestionnaireStatusEnum {\n /**\n * Идентификатор статуса \"Опрос начат\".\n */\n started = 1,\n\n /**\n * Идентификатор статуса \"Напомнить позже\".\n */\n remindLater = 2,\n\n /**\n * Идентификатор статуса \"Отказ от опроса\".\n */\n refuse = 3,\n\n /**\n * Идентификатор статуса \"Опрос завершен\".\n */\n finished = 4,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, of, switchMap, tap } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { SC_USER_INFO, ScUser } from '../../user';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';\nimport { ScIQuestionAnswer, ScIQuestionnaire, ScIQuestionnaireQuestion, ScQuestionnaireStatusEnum } from '..';\n\n/**\n * Сервис для работы с опросниками.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScQuestionnaireService {\n /**\n * HTTP-клиент.\n */\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * {@link Observable} данных о текущем пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(SC_USER_INFO);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Выполняет запрос получения списка опросников.\n */\n public getQuestionnaires$(): Observable<ScIQuestionnaire[]> {\n return this.user$.pipe(switchMap((user) => (user.isGuest ? of([]) : this.http.get<ScIQuestionnaire[]>(`${this.urls.apiUrl}/questionnaires`))));\n }\n\n /**\n * Выполняет запрос получения списка вопросов опросника.\n *\n * @param questionnaire Опросник для которого необходимо получить список вопросов.\n */\n public getQuestions$(questionnaire: ScIQuestionnaire): Observable<ScIQuestionnaireQuestion[]> {\n return (\n this.http\n .get<ScIQuestionnaireQuestion[]>(`${this.urls.apiUrl}/questionnaires/${questionnaire.id}/questions`)\n // eslint-disable-next-line no-param-reassign,no-return-assign\n .pipe(tap((questions) => (questionnaire.questions = questions)))\n );\n }\n\n /**\n * Выполняет запрос отправки ответа на вопрос опросника.\n *\n * @param questionnaireId Идентификатор опросника.\n * @param questionId Идентификатор вопроса опросника.\n * @param answers Список ответов на вопрос опросника.\n */\n public sendAnswers$(questionnaireId: number, questionId: number, answers: ScIQuestionAnswer[]): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/questionnaires/${questionnaireId}/questions/${questionId}/answers`, answers).pipe(\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.questionnaireAnswered,\n params: { questionnaire_id: questionnaireId },\n });\n })\n );\n }\n\n /**\n * Выполняет запрос установки статуса опросника.\n *\n * @param questionnaire Опросник для которого необходимо получить список вопросов.\n * @param status Идентификатор статуса опросника.\n */\n public setStatus$(questionnaire: ScIQuestionnaire, status: ScQuestionnaireStatusEnum): Observable<void> {\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n return this.http.get<void>(`${this.urls.apiUrl}/questionnaires/${questionnaire.id}/statuses/${status}`);\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { ScIPaginate } from '../../pagination';\nimport { SC_URLS } from '../../tokens';\nimport { ScIReclamation, ScIReclamationOnDataCreate, ScIReclamationOnDataCreateItem, ScIReclamationShort } from '../dto';\n\n/**\n * Сервис для работы с рекламациями.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScReclamationService {\n /**\n * Инициализирует экземпляр класса {@link ScReclamationService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls\n ) {}\n\n /**\n * Создаёт запрос новую рекламацию.\n *\n * @param newReclamation Данные новой рекламации.\n */\n public createReclamation$(newReclamation: ScIReclamationOnDataCreate): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/reclamations`, newReclamation);\n }\n\n /**\n * Возвращает список рекламаций с пагинацией.\n *\n * @param params Параметры запроса получения рекламаций.\n */\n public getReclamations$(params: HttpParams): Observable<ScIPaginate<ScIReclamationShort>> {\n return this.http.get<ScIPaginate<ScIReclamationShort>>(`${this.urls.apiUrl}/reclamations`, { params: params });\n }\n\n /**\n * Возвращает полную информацию о рекламации.\n *\n * @param reclamationId Идентификатор рекламации.\n */\n public getReclamation$(reclamationId: number): Observable<ScIReclamation> {\n return this.http.get<ScIReclamation>(`${this.urls.apiUrl}/reclamations/${reclamationId}`);\n }\n\n /**\n * Возвращает файл рекламации в формате Blob.\n *\n * @param reclamationId Идентификатор рекламации.\n */\n public downloadReclamation$(reclamationId: number): Observable<Blob> {\n return this.http\n .get(`${this.urls.apiUrl}/reclamations/${reclamationId}/download`, { responseType: 'blob' })\n .pipe(map((reclamation) => new Blob([reclamation], { type: 'application/pdf' })));\n }\n\n /**\n * Отправляет новое сообщение рекламации.\n *\n * @param reclamationId Идентификатор рекламации.\n * @param newMessage Новое сообщение рекламации.\n */\n public sendMessages$(reclamationId: number, newMessage: ScIReclamationOnDataCreateItem): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/reclamations/${reclamationId}/messages`, newMessage);\n }\n\n /**\n * Выполняет запрос удаления рекламации.\n *\n * @param reclamationId Идентификатор рекламации.\n */\n public deleteReclamation$(reclamationId: number): Observable<undefined> {\n return this.http.delete<undefined>(`${this.urls.apiUrl}/reclamations/${reclamationId}`);\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Thing, WithContext } from 'schema-dts';\n\n/**\n * Компонент структурированных данных.\n */\n@Component({\n selector: 'sc-json-ld',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScJsonLdComponent<T extends Thing> {\n /**\n * HTML разметка, в которую внедряется объект структурированных данных.\n */\n @HostBinding('innerHTML')\n public jsonLD?: SafeHtml;\n\n /**\n * Инициализирует экземпляр класса {@link ScJsonLdComponent}.\n *\n * @param sanitizer Объект DomSanitizer для безопасной обработки HTML и стилей.\n */\n public constructor(private readonly sanitizer: DomSanitizer) {}\n\n /**\n * Объект структурированных данных о товаре.\n */\n @Input()\n public set json(currentValue: WithContext<T>) {\n this.jsonLD = this.getSafeHTML(currentValue);\n }\n\n /**\n * Возвращает безопасный html код.\n *\n * @param json JSON данные.\n */\n private getSafeHTML(json?: WithContext<T>): SafeHtml {\n // eslint-disable-next-line sonarjs/no-angular-bypass-sanitization\n return this.sanitizer.bypassSecurityTrustHtml(\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n `<script type=\"application/ld+json\">${json ? JSON.stringify(json, null, 2).replaceAll('</script>', String.raw`<\\/script>`) : ''}</script>`\n );\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { ScJsonLdComponent } from './sc-json-ld.component';\n\n/**\n * Модуль структурированных данных.\n */\n@NgModule({\n declarations: [ScJsonLdComponent],\n exports: [ScJsonLdComponent],\n})\nexport class ScJsonLdModule {}\n","/**\n * Перечисление типов подсказок запросов.\n */\n// eslint-disable-next-line no-shadow\nexport enum ScISuggestionType {\n /**\n * Подсказки по фио.\n */\n fio = 'fio',\n\n /**\n * Подсказки по адресам.\n */\n address = 'address',\n\n /**\n * Подсказки по организациям.\n */\n organization = 'organization',\n\n /**\n * Подсказки по банкам.\n */\n bank = 'bank',\n\n /**\n * Подсказки по email.\n */\n email = 'email',\n}\n","/* eslint-disable security/detect-object-injection */\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { ScISuggestionType } from '../enums/sc-i-suggestion-type';\n\n/**\n * Сервис работы с API подсказок.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScSuggestionService {\n /**\n * Инициализирует экземпляр класса {@link ScSuggestionService}.\n *\n * @param http Сервис для выполнения HTTP-запросов.\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls\n ) {}\n\n /**\n * Возвращает {@link Observable} подсказок по указанному запросу.\n *\n * @param query Запрос, для которого нужно получить подсказки.\n * @param type Тип подсказок.\n */\n public getData<T>(query: string, type: ScISuggestionType = ScISuggestionType.address): Observable<T[]> {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return this.http.get<T[]>(`${this.urls.apiUrl}/suggestions/${[type]}`, { params: { query: query } });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { EventEmitter, inject, Injectable } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\n\nimport { ScISeo } from '../catalog/dto/sc-i-seo';\nimport { ScIDefaultPageMeta } from '../config/sc-i-default-page-meta';\nimport { ScIUrls } from '../config/sc-i-urls';\nimport { SC_COMPANY_NAME } from '../tokens/sc-company-name';\nimport { SC_DEFAULT_PAGE_META } from '../tokens/sc-default-page-meta';\nimport { SC_URLS } from '../tokens/sc-urls';\nimport { RobotsTagType } from './types/robots-tag-type';\n\n/**\n * Сервис управления SEO-параметрами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScSeoService {\n /**\n * Событие установки meta-тегов страницы.\n */\n public readonly isSetMetaTagsEventEmitter: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Данные о мета-данных страницы по умолчанию.\n */\n private readonly defaultSeo: ScIDefaultPageMeta = inject(SC_DEFAULT_PAGE_META);\n\n /**\n * Сервис маршрутизации.\n */\n private readonly router: Router = inject(Router);\n\n /**\n * Список ссылок приложения.\n */\n private readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Сервис установки метаданных страницы.\n */\n private readonly metaService: Meta = inject(Meta);\n\n /**\n * Сервис управления заголовком страницы.\n */\n private readonly titleService: Title = inject(Title);\n\n /**\n * Селектор группы для устанавливаемых метатегов.\n */\n private readonly dataGroupSelector: string = 'seo-tags';\n\n /**\n * Объект {@link Document}, предоставляющий доступ к DOM страницы.\n */\n private readonly document: Document = inject(DOCUMENT);\n\n /**\n * Название компании.\n */\n private readonly companyName: string = inject(SC_COMPANY_NAME);\n\n /**\n * Инициализирует экземпляр класса {@link ScSeoService}.\n */\n public constructor() {\n this.setShareType('website');\n }\n\n /**\n * Устанавливает meta-теги.\n *\n * @param title Заголовок страницы.\n * @param description Описание страницы.\n * @param keywords Ключевые слова страницы.\n * @param emitEventAfterSet Признак того, необходимо ли генерировать событие, после установки тегов. По умолчанию {@link true}.\n * @param robots Список robots тегов для страницы.\n */\n public setPageMetaTags(\n title: string = this.defaultSeo.title,\n description: string = this.defaultSeo.description,\n keywords: string = this.defaultSeo.keywords,\n emitEventAfterSet: boolean = true,\n robots: RobotsTagType[] = ['index', 'follow']\n ): void {\n this.setPageTitle(title);\n this.setPageMetaDescription(description);\n this.setPageMetaKeywords(keywords);\n\n this.setPageMetaRobots(robots);\n\n if (emitEventAfterSet) {\n this.isSetMetaTagsEventEmitter.emit();\n }\n }\n\n /**\n * Устанавливает Open Graph meta-теги.\n *\n * @param ogTitle Open Graph заголовок.\n * @param ogDescription Open Graph описание.\n * @param ogImg Open Graph изображение.\n * @param emitEventAfterSet Признак того, необходимо ли генерировать событие, после установки тегов. По умолчанию {@link true}.\n */\n public setPageOpenGraphMetaTags(\n ogTitle: string = this.defaultSeo.title,\n ogDescription: string = this.defaultSeo.description,\n ogImg: string = this.urls.logoUrl,\n emitEventAfterSet: boolean = true\n ): void {\n this.setOpenGraphMetaTags(ogTitle, ogDescription, `${this.urls.siteUrl}${this.router.url}`, ogImg);\n\n if (emitEventAfterSet) {\n this.isSetMetaTagsEventEmitter.emit();\n }\n }\n\n /**\n * Устанавливает все meta-теги из пришедшего источника. Если какого-то тега нет, будет установлено значение по умолчанию.\n *\n * @param resource Источник meta - тегов.\n * @param img Изображение. Если не пришло, то будет установлено значение по умолчанию.\n * @param robots Список robots тегов для страницы.\n */\n public setMetaTagsFromResource(resource?: ScISeo, img: string = this.urls.logoUrl, robots: RobotsTagType[] = ['index', 'follow']): void {\n this.setAllPageMetaTags(resource?.title, resource?.description, resource?.keywords, img, resource?.meta, robots);\n }\n\n /**\n * Устанавливает все meta-теги страницы со значением по умолчанию, внедряя туда заголовок, если он передан.\n *\n * @param title Заголовок страницы.\n * @param robots Список robots тегов для страницы.\n */\n public setDefaultAllPageMetaTags(title: string = this.defaultSeo.title, robots: RobotsTagType[] = ['index', 'follow']): void {\n this.setAllPageMetaTags(`${title} - ${this.companyName}`, `${title}, ${this.defaultSeo.description}`, undefined, undefined, [], robots);\n }\n\n /**\n * Устанавливает все meta-теги страницы со значением по умолчанию, внедряя туда заголовок, если он передан. Устанавливает значение \"не индексировать\" для поисковых роботов.\n *\n * @param title Заголовок страницы.\n */\n public setNoIndexDefaultAllPageMetaTags(title: string = this.defaultSeo.title): void {\n this.setAllPageMetaTags(`${title} - ${this.companyName}`, `${title}, ${this.defaultSeo.description}`, undefined, undefined, [], ['noindex', 'nofollow', 'noarchive']);\n }\n\n /**\n * Устанавливает все meta-теги страницы. Если какой-либо из параметров не указан, для него устанавливается значение по умолчанию.\n *\n * @param title Заголовок страницы.\n * @param description Описание страницы.\n * @param keywords Ключевые слова страницы.\n * @param img Изображение.\n * @param meta Массив дополнительных значений метатегов.\n * @param robots Список robots тегов для страницы.\n */\n public setAllPageMetaTags(\n title: string = this.defaultSeo.title,\n description: string = this.defaultSeo.description,\n keywords: string = this.defaultSeo.keywords,\n img: string = this.urls.logoUrl,\n meta: ScISeo['meta'] = [],\n robots: RobotsTagType[] = ['index', 'follow']\n ): void {\n this.removeMetaTags();\n this.setPageTitle(title);\n this.setPageMetaDescription(description);\n this.setPageMetaKeywords(keywords);\n this.setOpenGraphMetaTags(title, description, `${this.urls.siteUrl}${this.router.url}`, img);\n meta.forEach((tag) => {\n this.setPageMetaByName(tag.name, tag.content);\n });\n this.setPageMetaRobots(robots);\n\n this.isSetMetaTagsEventEmitter.emit();\n }\n\n /**\n * Устанавливает meta-тег robots для страницы.\n *\n * @param robots Список robots тегов для страницы.\n */\n public setPageMetaRobots(robots: RobotsTagType[]): void {\n this.setPageMetaByName('robots', robots.join(', '));\n }\n\n /**\n * Удаляет все установленные meta-теги.\n */\n public removeMetaTags(): void {\n const tags = this.document.querySelectorAll<HTMLMetaElement>(`meta[data-group=\"${this.dataGroupSelector}\"]`);\n\n tags.forEach((tag) => {\n this.metaService.removeTagElement(tag);\n });\n }\n\n /**\n * Возвращает сгенерированный SEO-resource с указанными параметрами.\n *\n * @param seo Данные SEO ресурса.\n * @param defaultTitle Заголовок страницы используемый в случае отсутствия заголовка в SEO-ресурсе.\n * @param defaultDescription Описание страницы используемое в случае отсутствия описания в SEO-ресурсе.\n * @param defaultKeyWords Ключевые слова страницы используемые в случае отсутствия ключевых слов в SEO-ресурсе.\n */\n public getGenerateSeoResource(\n seo: ScISeo | undefined,\n defaultTitle: string,\n defaultDescription: string = this.defaultSeo.description,\n defaultKeyWords: string = this.defaultSeo.keywords\n ): ScISeo {\n return {\n title: seo?.title ?? defaultTitle,\n description: seo?.description ?? defaultDescription,\n keywords: seo?.keywords ?? defaultKeyWords,\n meta: seo?.meta,\n };\n }\n\n /**\n * Устанавливает title-заголовок страницы.\n *\n * @param title Заголовок страницы.\n * @param appendDefaultTitle Флаг необходимости добавить заголовок по умолчанию в конец заголовка страницы.\n */\n private setPageTitle(title: string, appendDefaultTitle: boolean = false): void {\n this.titleService.setTitle(title + (appendDefaultTitle ? ` - ${this.defaultSeo.title}` : ''));\n }\n\n /**\n * Устанавливает meta-описание страницы.\n *\n * @param description Meta-описание страницы.\n */\n private setPageMetaDescription(description: string): void {\n this.setPageMetaByName('description', description);\n }\n\n /**\n * Устанавливает meta-ключевые слова страницы.\n *\n * @param keywords Meta-ключевые слова страницы.\n */\n private setPageMetaKeywords(keywords: string): void {\n this.setPageMetaByName('keywords', keywords);\n }\n\n /**\n * Устанавливает Open Graph meta-теги страницы для социальных сетей.\n *\n * @param title Заголовок страницы.\n * @param description Описание страницы.\n * @param url Ссылка на страницу.\n * @param img Изображение.\n */\n private setOpenGraphMetaTags(title: string, description: string, url: string, img: string): void {\n this.setOpenGraphMetaByProperty('og:title', title);\n this.setOpenGraphMetaByProperty('og:url', url);\n this.setOpenGraphMetaByProperty('og:image', img);\n this.setOpenGraphMetaByProperty('og:description', description);\n this.setOpenGraphMetaByProperty('og:type', 'website');\n }\n\n /**\n * Устанавливает meta-тег страницы с указанным именем.\n * Будет создан или обновлён заголовок вида `<meta name=\"{name}\" content=\"{content}\" />`\n *\n * @param name Название заголовка.\n * @param content Содержимое заголовка.\n */\n private setPageMetaByName(name: string, content: string): void {\n this.metaService.updateTag({ name: name, content: content, 'data-group': this.dataGroupSelector });\n }\n\n /**\n * Устанавливает Open Graph meta-тег по свойству атрибута property.\n *\n * @param property Свойство атрибута.\n * @param content Содержимое тега.\n */\n private setOpenGraphMetaByProperty(property: string, content: string): void {\n this.metaService.updateTag({ property: property, content: content, 'data-group': this.dataGroupSelector });\n }\n\n /**\n * Устанавливает Open Graph мета-тег типа объекта.\n *\n * @param type Тип объекта.\n */\n private setShareType(type: string): void {\n this.setOpenGraphMetaByProperty('og:type', type);\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Сервис, содержащий вспомогательные методы для работы с телефонными номерами.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScPhoneService {\n /**\n * Возвращает признак, что указанная строка является номером телефона.\n *\n * @param value Значение, которое необходимо проверить.\n * @returns Признак того, что строка является номером телефона.\n */\n public static isValidPhoneNumber(value: string): boolean {\n // eslint-disable-next-line security/detect-unsafe-regex, sonarjs/regex-complexity\n return /^\\+?\\s{0,3}\\d{0,2}[\\s-]{0,3}(\\(?\\s{0,3}\\d{1,4}\\s{0,3}\\)?)?([\\s-]{0,3}\\d{1,4}){1,5}$/g.test(value);\n }\n\n /**\n * Возвращает очищенное от лишних символов представление номера телефона.\n *\n * @param value Значение, которое необходимо очистить.\n * @returns Очищенное представление номера телефона.\n */\n public static cleanPhoneNumber(value: string): string {\n return value.replaceAll(/[\\s()+-]/g, '').replaceAll(/^8/g, '7');\n }\n\n /**\n * Проверяет, что номер телефона подходит для использования в мессенджерах.\n *\n * @param value Номер телефона, который необходимо проверить.\n * @returns Признак того, что номер телефона подходит для мессенджеров.\n */\n public static isValidPhoneNumberForMessenger(value: string): boolean {\n if (!this.isValidPhoneNumber(value)) {\n return false;\n }\n const cleanedValue = this.cleanPhoneNumber(value);\n\n return /^7[98]\\d{9}$/.test(cleanedValue);\n }\n\n /**\n * Возвращает удобочитаемое представление номера телефона.\n *\n * @param value Значение, которое необходимо преобразовать.\n * @returns Удобочитаемое представление номера телефона.\n */\n public static formatPhoneNumber(value: string): string {\n if (/^\\+?79\\d/g.test(value)) {\n return value.replaceAll(/^\\+?(\\d)(\\d{3})(\\d{3})(\\d{2})(\\d*)$/g, '+$1($2)$3-$4-$5');\n }\n\n if (/^\\+?7\\d/g.test(value)) {\n return value.replaceAll(/^\\+?(\\d)(\\d{4})(\\d{2})(\\d{2})(\\d*)$/g, '+$1($2)$3-$4-$5');\n }\n\n return value;\n }\n}\n","import { ScIEmployment, ScIExperience, ScISalary } from '../interfaces';\nimport { ScIVacancy } from '../internal/dto';\n\n/**\n * Модель данных о вакансии.\n */\nexport class ScVacancy {\n /**\n * ID вакансии.\n */\n public id: string;\n\n /**\n * Название вакансии.\n */\n public name: string;\n\n /**\n * URL-адрес вакансии.\n */\n public url: string;\n\n /**\n * Данные о заработной плате.\n */\n public salary: ScISalary | null;\n\n /**\n * Требуемый опыт.\n */\n public experience: ScIExperience | null;\n\n /**\n * Вид занятости.\n */\n public employment: ScIEmployment | null;\n\n /**\n * Инициализирует экземпляр класса {@link ScVacancy}\n *\n * @param vacancy Данные о вакансии.\n */\n public constructor(vacancy: ScIVacancy) {\n this.id = vacancy.id;\n this.name = vacancy.name;\n this.url = vacancy.alternate_url;\n this.salary = vacancy.salary;\n this.experience = vacancy.experience ?? null;\n this.employment = vacancy.employment ?? null;\n }\n}\n","import { ScIVacanciesList, ScIVacancy } from '../internal/dto';\nimport { ScVacancy } from './sc-vacancy';\n\n/**\n * Модель данных списка вакансий.\n */\nexport class ScVacanciesList {\n /**\n * Общее количество найденных вакансий.\n */\n public found: number;\n\n /**\n * Количество вакансий на странице.\n */\n public perPage: number;\n\n /**\n * Номер страницы.\n */\n public page: number;\n\n /**\n * Список вакансий на странице.\n */\n public items: ScVacancy[];\n\n /**\n * Инициализирует экземпляр класса {@link ScVacanciesList}\n *\n * @param vacancies информация о списке вакансий.\n */\n public constructor(vacancies: ScIVacanciesList) {\n this.found = vacancies.found;\n this.perPage = vacancies.per_page;\n this.page = vacancies.page;\n this.items = vacancies.items.map((v: ScIVacancy) => new ScVacancy(v));\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ScIVacanciesDataSource } from '../interfaces';\n\n/**\n * Токен внедрения источника информации о вакансиях.\n */\nexport const SC_VACANCIES_DATA_SOURCE: InjectionToken<ScIVacanciesDataSource> = new InjectionToken<ScIVacanciesDataSource>('IVacanciesDataSource');\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { ScICacheLifetime } from '../../config';\nimport { SC_CACHE_SETTINGS, SC_IS_HEADER_REQUIRED, ScCacheSettings } from '../../httpInterceptors';\nimport { SC_CACHE_LIFETIME } from '../../tokens';\nimport { ScVacanciesList } from '../classes';\nimport { ScIVacanciesDataSource } from '../interfaces';\nimport { ScIVacanciesList } from '../internal/dto';\nimport { SC_VACANCIES_DATA_SOURCE } from '../tokens';\n\n/**\n * Сервис для работы со списком вакансий.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScVacanciesService {\n /**\n * Инициализирует экземпляр класса {@link ScVacanciesService}.\n *\n * @param http Сервис для выполнения HTTP-запросов.\n * @param vacanciesData Объект с информацией об источнике вакансий.\n * @param cacheLifeTime Объект с информацией о времени жизни данных.\n */\n public constructor(\n private readonly http: HttpClient,\n @Inject(SC_VACANCIES_DATA_SOURCE) private readonly vacanciesData: ScIVacanciesDataSource,\n @Inject(SC_CACHE_LIFETIME) private readonly cacheLifeTime: ScICacheLifetime\n ) {}\n\n /**\n * Возвращает {@link Observable} информации о вакансиях компании.\n *\n * @param perPage Количество вакансий на странице.\n * @param page Запрашиваемая страница списка вакансий.\n */\n // TODO: Переделать отправку параметров в запросе на HttpParams (использовать IPaginationParams)\n public getVacancies(perPage: number = 10, page: number = 0): Observable<ScVacanciesList> {\n return this.http\n .get<ScIVacanciesList>(`${this.vacanciesData.apiUrl}?employer_id=${this.vacanciesData.employerId}&per_page=${perPage}&page=${page}`, {\n context: new HttpContext().set(SC_IS_HEADER_REQUIRED, false).set(SC_CACHE_SETTINGS, new ScCacheSettings(true, this.cacheLifeTime.vacanciesData)),\n })\n .pipe(map((result: ScIVacanciesList) => new ScVacanciesList(result)));\n }\n}\n","/* eslint-disable quotes,sonarjs/no-nested-template-literals */\n\nimport { formatDate } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { WA_WINDOW } from '@ng-web-apis/common';\n\nimport { ScIUrls } from '../config';\nimport { SC_URLS } from '../tokens';\n\n/**\n * Сервис для работы с vCard.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScVCardService {\n /**\n * Инициализирует экземпляр класса {@link ScVCardService}.\n *\n * @param urls Список ссылок приложения.\n * @param windowReference Объект {@link Window}, предоставляющий доступ к окну приложения.\n */\n public constructor(\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n @Inject(WA_WINDOW) private readonly windowReference: Window & typeof globalThis\n ) {}\n\n /**\n * Формирует строку VCard контакта персоны.\n *\n * @param name Имя контакта.\n * @param phone Телефон контакта.\n * @param email Адрес электронной почты контакта.\n * @param type Описание типа контакта.\n * @param org Организация контакта.\n * @param photoUri Ссылка на фото контакта.\n */\n public createIndividualVCardStr(name: string, phone: string, email: string, type: string = '', org: string = 'ООО Снабцентр', photoUri: string = this.urls.logoUrl): string {\n const currentDate: string = formatDate(new Date(), 'yyyy-MM-dd', 'en');\n\n return (\n `BEGIN:VCARD` +\n `\\nVERSION:3.0` +\n `\\nKIND:individual` +\n `\\nPHOTO;VALUE=uri:${photoUri}` +\n `\\nN:${name}` +\n `\\nFN:${name}` +\n `\\nEMAIL:${email}` +\n `\\nTEL;TYPE=work:${phone}` +\n `\\nORG:${org}${type ? `\\nTITLE:${type}` : ''}\\nLOGO;VALUE=uri:${this.urls.logoUrl}` +\n // TODO: Переделать ссылку на страницу пользователя\n `\\nURL:${this.windowReference.location.protocol}//${this.windowReference.location.host}` +\n `\\nREV:${currentDate}` +\n `\\nEND:VCARD`\n );\n }\n\n /**\n * Формирует строку VCard контакта организации.\n *\n * @param name Имя контакта.\n * @param phone Телефон контакта.\n * @param email Адрес электронной почты контакта.\n * @param type Описание типа контакта.\n * @param org Организация контакта.\n */\n public createOrgVCardStr(name: string, phone: string, email: string, type: string = '', org: string = 'ООО Снабцентр'): string {\n const currentDate: string = formatDate(new Date(), 'yyyy-MM-dd', 'en');\n\n return (\n `BEGIN:VCARD` +\n `\\nVERSION:3.0` +\n `\\nKIND:org` +\n `\\nPHOTO;VALUE=uri:${this.urls.logoUrl}` +\n `\\nFN:${name}` +\n `\\nEMAIL:${email}` +\n `\\nTEL;TYPE=work:${phone}` +\n `\\nORG:${org}${type ? `\\nTITLE:${type}` : ''}\\nLOGO;VALUE=uri:${this.urls.logoUrl}` +\n `\\nURL:${this.windowReference.location.protocol}//${this.windowReference.location.host}` +\n // TODO: Добавить ADR.\n `\\nREV:${currentDate}` +\n `\\nEND:VCARD`\n );\n }\n\n /**\n * Возвращает vCard файла контакта в формате {@link Blob}.\n *\n * @param data Строка данных, на основе которой создаётся файл vCard.\n */\n // eslint-disable-next-line class-methods-use-this\n public getVCardBlob(data: string): Blob {\n return new Blob([data], { type: 'text/x-vcard' });\n }\n\n /**\n * Выполняет скачивание генерируемого vCard файла контакта.\n *\n * @param data Строка данных, на основе которой создаётся файл vCard.\n */\n public downloadVCard(data: string): void {\n this.windowReference.open(this.windowReference.URL.createObjectURL(this.getVCardBlob(data)));\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ScIUrls } from '../../config';\nimport { SC_URLS } from '../../tokens';\nimport { ScIPhoneOnDataApprove } from '../../user';\nimport { IPhoneCheck } from '../interfaces/sc-i-phone-check';\n\n/**\n * Сервис для отправки кодов подтверждения (номера телефона, адреса эл. почты и т.д.).\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScVerificationService {\n /**\n * Инициализирует экземпляр класса {@link ScVerificationService}.\n *\n * @param http HTTP-клиент.\n * @param urls Список ссылок на разделы backend'a.\n */\n public constructor(\n private http: HttpClient,\n @Inject(SC_URLS) private readonly urls: ScIUrls\n ) {}\n\n /**\n * Возвращает {@link Observable} запроса на отправку кода подтверждения указанного номера телефона.\n *\n * @param phone Данные номера телефона.\n * @returns Ответ запроса с отсутствующим телом в формате {@link Observable}.\n */\n public sendPhoneApproveCode(phone: string): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/user/verification/phone`, { phone: phone });\n }\n\n /**\n * Возвращает {@link Observable} запроса на отправку сообщения электронной почты для подтверждения адреса электронной почты.\n *\n * @param email Электронная почта.\n * @returns Ответ запроса с отсутствующим телом в формате {@link Observable}.\n */\n public sendEmailApproveCode(email: string): Observable<undefined> {\n return this.http.post<undefined>(`${this.urls.apiUrl}/user/verification/email`, { email: email });\n }\n\n /**\n * Возвращает {@link Observable} запроса на подтверждение телефона пользователя.\n *\n * @param data Данные необходимые для подтверждения телефона.\n * @returns Ответ запроса с отсутствующим телом в формате {@link Observable}.\n */\n public approvePhone(data: ScIPhoneOnDataApprove): Observable<undefined> {\n return this.http.patch<undefined>(`${this.urls.apiUrl}/user/verification/phone`, data);\n }\n\n /**\n * Возвращает {@link Observable} объект проверки телефона.\n *\n * @param phone Номер телефона.\n */\n public getPhoneCheck$(phone: string): Observable<IPhoneCheck> {\n return this.http.get<IPhoneCheck>(`${this.urls.apiUrl}/user/verification/phone/check`, {\n params: { phone: phone },\n });\n }\n}\n","/*\n * Публичное API библиотеки бизнес-логики.\n */\n\nexport * from './common';\nexport * from './auth';\nexport * from './banners';\nexport * from './cart';\nexport * from './catalog';\nexport * from './config';\nexport * from './configurator';\nexport * from './contacts';\nexport * from './contragent';\nexport * from './converters';\nexport * from './delivery-address';\nexport * from './frequently-asked-questions';\nexport * from './files';\nexport * from './guards';\nexport * from './helpers';\nexport * from './httpInterceptors';\nexport * from './locations';\nexport * from './news';\nexport * from './notifications';\nexport * from './utm';\nexport * from './order';\nexport * from './pagination';\nexport * from './providers';\nexport * from './pipes';\nexport * from './questionnaire';\nexport * from './reclamation';\nexport * from './references';\nexport * from './sc-json-ld';\nexport * from './search';\nexport * from './suggestion';\nexport * from './services';\nexport * from './tokens';\nexport * from './ui';\nexport * from './user';\nexport * from './user-metrika';\nexport * from './utils/phone-fotmatter';\nexport * from './vacancies';\nexport * from './vCard';\nexport * from './verification';\nexport * from './warehouse';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.ScTokenService","i3.ScUserMetrikaService","i1.ScUserService","i2.ScUIService","i3.ScConvertersService","i4.ScUserMetrikaService","i2.ScCatalogService","i2.ScUserMetrikaService","i2.ScAuthService","i1.ScTokenService","i1.ScAuthService"],"mappings":"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"}