@snabcentr/client-core 3.20.0 → 3.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/catalog/services/sc-catalog-redirect.service.d.ts +1 -1
  2. package/esm2022/auth/services/sc-auth.service.mjs +3 -2
  3. package/esm2022/catalog/services/sc-catalog-redirect.service.mjs +3 -3
  4. package/esm2022/public-api.mjs +2 -1
  5. package/esm2022/ssr-cache/classes/index.mjs +2 -0
  6. package/esm2022/ssr-cache/classes/sc-ssr-response-cache.mjs +100 -0
  7. package/esm2022/ssr-cache/index.mjs +6 -0
  8. package/esm2022/ssr-cache/interfaces/index.mjs +3 -0
  9. package/esm2022/ssr-cache/interfaces/sc-i-ssr-response-cache-settings.mjs +2 -0
  10. package/esm2022/ssr-cache/interfaces/sc-i-ssr-response-cache-stats.mjs +2 -0
  11. package/esm2022/ssr-cache/internal/is-ssr-response-cacheable.mjs +25 -0
  12. package/esm2022/ssr-cache/internal/sc-i-ssr-cached-response.mjs +2 -0
  13. package/esm2022/ssr-cache/sc-ssr-response-cache.backend.mjs +71 -0
  14. package/esm2022/ssr-cache/sc-ssr-response-cache.providers.mjs +12 -0
  15. package/esm2022/ssr-cache/tokens/index.mjs +3 -0
  16. package/esm2022/ssr-cache/tokens/sc-ssr-response-cache-settings.mjs +8 -0
  17. package/esm2022/ssr-cache/tokens/sc-ssr-response-cache.mjs +13 -0
  18. package/fesm2022/snabcentr-client-core.mjs +222 -7
  19. package/fesm2022/snabcentr-client-core.mjs.map +1 -1
  20. package/package.json +1 -1
  21. package/public-api.d.ts +1 -0
  22. package/release_notes.tmp +3 -3
  23. package/ssr-cache/classes/index.d.ts +1 -0
  24. package/ssr-cache/classes/sc-ssr-response-cache.d.ts +59 -0
  25. package/ssr-cache/index.d.ts +5 -0
  26. package/ssr-cache/interfaces/index.d.ts +2 -0
  27. package/ssr-cache/interfaces/sc-i-ssr-response-cache-settings.d.ts +17 -0
  28. package/ssr-cache/interfaces/sc-i-ssr-response-cache-stats.d.ts +17 -0
  29. package/ssr-cache/internal/is-ssr-response-cacheable.d.ts +14 -0
  30. package/ssr-cache/internal/sc-i-ssr-cached-response.d.ts +16 -0
  31. package/ssr-cache/sc-ssr-response-cache.backend.d.ts +42 -0
  32. package/ssr-cache/sc-ssr-response-cache.providers.d.ts +6 -0
  33. package/ssr-cache/tokens/index.d.ts +2 -0
  34. package/ssr-cache/tokens/sc-ssr-response-cache-settings.d.ts +6 -0
  35. package/ssr-cache/tokens/sc-ssr-response-cache.d.ts +6 -0
@@ -0,0 +1,13 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { ScSsrResponseCache } from '../classes/sc-ssr-response-cache';
3
+ /**
4
+ * Кэш по умолчанию, один на процесс.
5
+ */
6
+ const defaultSsrResponseCache = new ScSsrResponseCache();
7
+ /**
8
+ * Токен кэша ответов API между SSR-рендерами. По умолчанию один экземпляр на процесс, можно переопределить провайдером.
9
+ */
10
+ export const SC_SSR_RESPONSE_CACHE = new InjectionToken('SC_SSR_RESPONSE_CACHE', {
11
+ factory: () => defaultSsrResponseCache,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc3NyLXJlc3BvbnNlLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zc3ItY2FjaGUvdG9rZW5zL3NjLXNzci1yZXNwb25zZS1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFOztHQUVHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7QUFFekQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBdUMsSUFBSSxjQUFjLENBQXFCLHVCQUF1QixFQUFFO0lBQ3JJLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUI7Q0FDekMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2NTc3JSZXNwb25zZUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcy9zYy1zc3ItcmVzcG9uc2UtY2FjaGUnO1xuXG4vKipcbiAqINCa0Y3RiCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiwg0L7QtNC40L0g0L3QsCDQv9GA0L7RhtC10YHRgS5cbiAqL1xuY29uc3QgZGVmYXVsdFNzclJlc3BvbnNlQ2FjaGUgPSBuZXcgU2NTc3JSZXNwb25zZUNhY2hlKCk7XG5cbi8qKlxuICog0KLQvtC60LXQvSDQutGN0YjQsCDQvtGC0LLQtdGC0L7QsiBBUEkg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4LiDQn9C+INGD0LzQvtC70YfQsNC90LjRjiDQvtC00LjQvSDRjdC60LfQtdC80L/Qu9GP0YAg0L3QsCDQv9GA0L7RhtC10YHRgSwg0LzQvtC20L3QviDQv9C10YDQtdC+0L/RgNC10LTQtdC70LjRgtGMINC/0YDQvtCy0LDQudC00LXRgNC+0LwuXG4gKi9cbmV4cG9ydCBjb25zdCBTQ19TU1JfUkVTUE9OU0VfQ0FDSEU6IEluamVjdGlvblRva2VuPFNjU3NyUmVzcG9uc2VDYWNoZT4gPSBuZXcgSW5qZWN0aW9uVG9rZW48U2NTc3JSZXNwb25zZUNhY2hlPignU0NfU1NSX1JFU1BPTlNFX0NBQ0hFJywge1xuICAgIGZhY3Rvcnk6ICgpID0+IGRlZmF1bHRTc3JSZXNwb25zZUNhY2hlLFxufSk7XG4iXX0=
@@ -1,15 +1,15 @@
1
1
  import * as i1 from 'rxjs';
2
- import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, EMPTY, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
2
+ import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, EMPTY, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan, defer, from, lastValueFrom, timeout, TimeoutError } from 'rxjs';
3
3
  import { map, startWith, catchError } from 'rxjs/operators';
4
4
  import { parseISO, parse, isValid, format } from 'date-fns';
5
5
  import { isString, isNil, isMatch, isArray, omit, get } from 'lodash-es';
6
6
  import * as i0 from '@angular/core';
7
- import { InjectionToken, inject, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, DestroyRef, LOCALE_ID, Pipe, assertInInjectionContext, RendererFactory2 } from '@angular/core';
7
+ import { InjectionToken, inject, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, DestroyRef, LOCALE_ID, Pipe, assertInInjectionContext, RendererFactory2, makeEnvironmentProviders } from '@angular/core';
8
8
  import { WA_LOCAL_STORAGE, WA_USER_AGENT, WA_WINDOW } from '@ng-web-apis/common';
9
9
  import { filterByKey, toValue, WA_STORAGE_EVENT, StorageService } from '@ng-web-apis/storage';
10
10
  import { isPlatformBrowser, isPlatformServer, DOCUMENT, formatDate } from '@angular/common';
11
11
  import * as i1$1 from '@angular/common/http';
12
- import { HttpContextToken, HttpContext, HttpHeaders, HttpClient, HttpParams, HttpErrorResponse, HttpResponse } from '@angular/common/http';
12
+ import { HttpContextToken, HttpContext, HttpHeaders, HttpClient, HttpParams, HttpErrorResponse, HttpResponse, FetchBackend, HttpXhrBackend, HttpStatusCode, HttpBackend } from '@angular/common/http';
13
13
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
14
14
  import { tuiIsPresent, TuiDay, tuiPure, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
15
15
  import { tuiCleanObject } from '@taiga-ui/addon-doc/utils';
@@ -1079,7 +1079,8 @@ class ScAuthService {
1079
1079
  this.tokenService.removeGuestToken();
1080
1080
  return of(null);
1081
1081
  }
1082
- return this.getGuestToken$();
1082
+ // На сервере ключ Гостя некуда сохранить, поэтому запрос не выполняется.
1083
+ return this.isServer ? of(null) : this.getGuestToken$();
1083
1084
  }), takeUntilDestroyed(this.destroyRef))
1084
1085
  .subscribe();
1085
1086
  if (this.isServer) {
@@ -3685,11 +3686,11 @@ class ScCatalogRedirectService {
3685
3686
  * (адрес со slug либо с идентификатором — в зависимости от настроек окружения).
3686
3687
  *
3687
3688
  * @param commands Сегменты канонического маршрута.
3688
- * @param status Статус редиректа: адрес с идентификатором заменяется на канонический навсегда, поэтому по умолчанию постоянный.
3689
+ * @param status Статус редиректа: вид адреса задаётся настройками окружения и может быть изменён, поэтому по умолчанию временный.
3689
3690
  * @returns Дерево канонического маршрута для навигации либо `false`, если редирект выполнен ответом сервера.
3690
3691
  */
3691
3692
  // eslint-disable-next-line sonarjs/function-return-type
3692
- redirectToCanonicalUrl(commands, status = ScRedirectStatusEnum.Permanent) {
3693
+ redirectToCanonicalUrl(commands, status = ScRedirectStatusEnum.Temporary) {
3693
3694
  const urlTree = this.router.createUrlTree(commands);
3694
3695
  if (this.isCanonicalRedirectEnabled && this.isServer && this.setServerRedirect(this.router.serializeUrl(urlTree), status)) {
3695
3696
  return false;
@@ -8714,6 +8715,220 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8714
8715
  }]
8715
8716
  }] });
8716
8717
 
8718
+ /**
8719
+ * Кэш ответов API, один на процесс: переживает пересоздание инжектора между SSR-рендерами.
8720
+ * Одинаковые одновременные запросы склеиваются, при переполнении вытесняется самая давняя запись.
8721
+ */
8722
+ class ScSsrResponseCache {
8723
+ /**
8724
+ * Инициализирует экземпляр класса {@link ScSsrResponseCache}.
8725
+ *
8726
+ * @param maxEntries Максимальное количество записей в кэше.
8727
+ */
8728
+ constructor(maxEntries = 100) {
8729
+ /**
8730
+ * Закэшированные ответы по ключу запроса.
8731
+ */
8732
+ this.entries = new Map();
8733
+ /**
8734
+ * Выполняемые запросы по ключу запроса.
8735
+ */
8736
+ this.pending = new Map();
8737
+ /**
8738
+ * Количество запросов, отданных без обращения к API.
8739
+ */
8740
+ this.hits = 0;
8741
+ /**
8742
+ * Количество запросов, выполненных к API.
8743
+ */
8744
+ this.misses = 0;
8745
+ this.maxEntries = Number.isFinite(maxEntries) ? Math.max(1, maxEntries) : 100;
8746
+ }
8747
+ /**
8748
+ * Возвращает ответ из кэша, при отсутствии или устаревании загружает и кэширует. Ошибка загрузки не кэшируется.
8749
+ *
8750
+ * @param key Ключ запроса.
8751
+ * @param lifeTime Время жизни ответа (мс).
8752
+ * @param loader Функция загрузки ответа.
8753
+ */
8754
+ getOrLoad(key, lifeTime, loader) {
8755
+ const cached = this.get(key);
8756
+ if (cached) {
8757
+ this.hits += 1;
8758
+ return Promise.resolve(cached.response);
8759
+ }
8760
+ const pending = this.pending.get(key);
8761
+ if (pending) {
8762
+ this.hits += 1;
8763
+ return pending;
8764
+ }
8765
+ this.misses += 1;
8766
+ const loading = loader()
8767
+ .then((response) => {
8768
+ this.set(key, { response, expiresAt: Date.now() + lifeTime });
8769
+ return response;
8770
+ })
8771
+ .finally(() => {
8772
+ this.pending.delete(key);
8773
+ });
8774
+ this.pending.set(key, loading);
8775
+ return loading;
8776
+ }
8777
+ /**
8778
+ * Возвращает статистику работы кэша.
8779
+ */
8780
+ getStats() {
8781
+ return { size: this.entries.size, hits: this.hits, misses: this.misses };
8782
+ }
8783
+ /**
8784
+ * Возвращает актуальную запись или `null`.
8785
+ *
8786
+ * @param key Ключ запроса.
8787
+ */
8788
+ get(key) {
8789
+ const entry = this.entries.get(key);
8790
+ if (!entry) {
8791
+ return null;
8792
+ }
8793
+ if (entry.expiresAt <= Date.now()) {
8794
+ this.entries.delete(key);
8795
+ return null;
8796
+ }
8797
+ // Перестановка в конец помечает запись как недавно использованную.
8798
+ this.entries.delete(key);
8799
+ this.entries.set(key, entry);
8800
+ return entry;
8801
+ }
8802
+ /**
8803
+ * Сохраняет запись, при переполнении вытесняя самую давнюю.
8804
+ *
8805
+ * @param key Ключ запроса.
8806
+ * @param entry Запись кэша.
8807
+ */
8808
+ set(key, entry) {
8809
+ this.entries.delete(key);
8810
+ if (this.entries.size >= this.maxEntries) {
8811
+ const [oldestKey] = this.entries.keys();
8812
+ this.entries.delete(oldestKey);
8813
+ }
8814
+ this.entries.set(key, entry);
8815
+ }
8816
+ }
8817
+
8818
+ /**
8819
+ * Кэш по умолчанию, один на процесс.
8820
+ */
8821
+ const defaultSsrResponseCache = new ScSsrResponseCache();
8822
+ /**
8823
+ * Токен кэша ответов API между SSR-рендерами. По умолчанию один экземпляр на процесс, можно переопределить провайдером.
8824
+ */
8825
+ const SC_SSR_RESPONSE_CACHE = new InjectionToken('SC_SSR_RESPONSE_CACHE', {
8826
+ factory: () => defaultSsrResponseCache,
8827
+ });
8828
+
8829
+ /**
8830
+ * Токен настроек кэша ответов API между SSR-рендерами. По умолчанию кэш выключен.
8831
+ */
8832
+ const SC_SSR_RESPONSE_CACHE_SETTINGS = new InjectionToken('SC_SSR_RESPONSE_CACHE_SETTINGS', {
8833
+ factory: () => ({ endpoints: [], lifeTime: 0, loadTimeout: 0 }),
8834
+ });
8835
+
8836
+ /**
8837
+ * Возвращает признак, что ответ можно кэшировать между SSR-рендерами: GET за JSON без ключей доступа по адресам из настроек.
8838
+ *
8839
+ * @param request Данные запроса.
8840
+ * @param settings Настройки кэша.
8841
+ * @param apiUrl Адрес API.
8842
+ * @param apiKeys Названия заголовков ключей доступа к API.
8843
+ *
8844
+ * @internal
8845
+ */
8846
+ function isSsrResponseCacheable(request, settings, apiUrl, apiKeys) {
8847
+ if (!Number.isFinite(settings.lifeTime) || settings.lifeTime <= 0 || request.method !== 'GET' || request.responseType !== 'json') {
8848
+ return false;
8849
+ }
8850
+ if (request.headers.has(apiKeys.keyName) || request.headers.has(apiKeys.guestKeyName)) {
8851
+ return false;
8852
+ }
8853
+ const [url] = request.url.split('?');
8854
+ if (!url.startsWith(apiUrl)) {
8855
+ return false;
8856
+ }
8857
+ const path = url.slice(apiUrl.length);
8858
+ return settings.endpoints.some((endpoint) => (endpoint.endsWith('*') ? path.startsWith(endpoint.slice(0, -1)) : path === endpoint));
8859
+ }
8860
+
8861
+ /**
8862
+ * Обработчик запросов с кэшем ответов API между SSR-рендерами.
8863
+ *
8864
+ * Стоит на уровне {@link HttpBackend}, ниже перехватчиков: ответ из кэша проходит через перенос в браузер,
8865
+ * а проверка ключей доступа видит итоговые заголовки. Отдаёт только итоговый {@link HttpResponse};
8866
+ * запрос не отменяется при отписке рендера, а ограничен `loadTimeout` из настроек.
8867
+ */
8868
+ class ScSsrResponseCacheBackend {
8869
+ constructor() {
8870
+ /**
8871
+ * Штатный обработчик, выполняющий запросы к API.
8872
+ */
8873
+ // TODO: Angular 21: проверить, какой backend регистрирует provideHttpClient.
8874
+ this.backend = inject(FetchBackend, { optional: true }) ?? inject(HttpXhrBackend);
8875
+ /**
8876
+ * Кэш ответов API.
8877
+ */
8878
+ this.cache = inject(SC_SSR_RESPONSE_CACHE);
8879
+ /**
8880
+ * Настройки кэша.
8881
+ */
8882
+ this.settings = inject(SC_SSR_RESPONSE_CACHE_SETTINGS);
8883
+ /**
8884
+ * Адрес API.
8885
+ */
8886
+ this.apiUrl = inject(SC_URLS).apiUrl;
8887
+ /**
8888
+ * Названия заголовков ключей доступа к API.
8889
+ */
8890
+ this.apiKeys = inject(SC_API_KEYS);
8891
+ }
8892
+ /** @inheritDoc */
8893
+ handle(request) {
8894
+ if (!isSsrResponseCacheable(request, this.settings, this.apiUrl, this.apiKeys)) {
8895
+ return this.backend.handle(request);
8896
+ }
8897
+ return defer(() => from(this.cache.getOrLoad(request.urlWithParams, this.settings.lifeTime, () => this.load(request)))).pipe(
8898
+ // Копия тела на каждый рендер, чтобы изменения не утекали между рендерами.
8899
+ map$1((response) => response.clone({ body: structuredClone(response.body) })));
8900
+ }
8901
+ /**
8902
+ * Выполняет запрос к API и возвращает его ответ.
8903
+ *
8904
+ * @param request Данные запроса.
8905
+ */
8906
+ load(request) {
8907
+ const response$ = this.backend.handle(request).pipe(filter((event) => event instanceof HttpResponse));
8908
+ if (this.settings.loadTimeout <= 0) {
8909
+ return lastValueFrom(response$);
8910
+ }
8911
+ // По таймауту запрос отменяется, ошибка отдаётся как HttpErrorResponse, как и остальные ошибки запросов.
8912
+ return lastValueFrom(response$.pipe(timeout(this.settings.loadTimeout), catchError$1((error) => throwError(() => error instanceof TimeoutError
8913
+ ? new HttpErrorResponse({ status: HttpStatusCode.GatewayTimeout, statusText: 'Gateway Timeout', url: request.url, error })
8914
+ : error))));
8915
+ }
8916
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSsrResponseCacheBackend, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8917
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSsrResponseCacheBackend }); }
8918
+ }
8919
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSsrResponseCacheBackend, decorators: [{
8920
+ type: Injectable
8921
+ }] });
8922
+
8923
+ /**
8924
+ * Возвращает провайдеры кэша ответов API между SSR-рендерами.
8925
+ * Подключать только в серверной конфигурации после `provideHttpClient()`: подменяют {@link HttpBackend}.
8926
+ */
8927
+ // TODO: Angular 21: проверить, что подмена HttpBackend остаётся последней после provideServerRendering(withRoutes()).
8928
+ function provideSsrResponseCache() {
8929
+ return makeEnvironmentProviders([{ provide: HttpBackend, useClass: ScSsrResponseCacheBackend }]);
8930
+ }
8931
+
8717
8932
  /**
8718
8933
  * Перечисление типов подсказок запросов.
8719
8934
  */
@@ -9093,5 +9308,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
9093
9308
  * Generated bundle index. Do not edit.
9094
9309
  */
9095
9310
 
9096
- export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, RESPONSE, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CANONICAL_REDIRECT_ENABLED, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_CATEGORY_STATE, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PAGE_QUERY_PARAM, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCTS_PAGINATION_LOADER, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogRedirectService, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationPageQueryParamService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScRedirectStatusEnum, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scGetPageQueryParamChanges, scOrderIsLoaded, scParsePageQueryParam, searchTermFactory };
9311
+ export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, RESPONSE, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CANONICAL_REDIRECT_ENABLED, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_CATEGORY_STATE, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PAGE_QUERY_PARAM, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCTS_PAGINATION_LOADER, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_SSR_RESPONSE_CACHE, SC_SSR_RESPONSE_CACHE_SETTINGS, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogRedirectService, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationPageQueryParamService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScRedirectStatusEnum, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSsrResponseCache, ScSsrResponseCacheBackend, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, provideSsrResponseCache, runningOnTerminalFactory, scGetCurrentRoute, scGetPageQueryParamChanges, scOrderIsLoaded, scParsePageQueryParam, searchTermFactory };
9097
9312
  //# sourceMappingURL=snabcentr-client-core.mjs.map