@sima-land/isomorph 11.0.0-alpha.52 → 11.0.0-alpha.53

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 (33) hide show
  1. package/dist/cjs/http/utils.js +62 -0
  2. package/dist/cjs/http/utils.js.map +1 -1
  3. package/dist/cjs/package.json +4 -4
  4. package/dist/cjs/preset/isomorphic/types.js.map +1 -1
  5. package/dist/cjs/preset/isomorphic/utils/axios-logging.js +63 -45
  6. package/dist/cjs/preset/isomorphic/utils/axios-logging.js.map +1 -1
  7. package/dist/cjs/preset/isomorphic/utils/fetch-logging.js +29 -0
  8. package/dist/cjs/preset/isomorphic/utils/fetch-logging.js.map +1 -1
  9. package/dist/cjs/preset/server/providers/known-http-api-hosts.js +3 -1
  10. package/dist/cjs/preset/server/providers/known-http-api-hosts.js.map +1 -1
  11. package/dist/cjs/preset/web/providers/known-http-api-hosts.js +3 -1
  12. package/dist/cjs/preset/web/providers/known-http-api-hosts.js.map +1 -1
  13. package/dist/esm/http/utils.js +60 -0
  14. package/dist/esm/http/utils.js.map +1 -1
  15. package/dist/esm/package.json +4 -4
  16. package/dist/esm/preset/isomorphic/types.js.map +1 -1
  17. package/dist/esm/preset/isomorphic/utils/axios-logging.js +63 -45
  18. package/dist/esm/preset/isomorphic/utils/axios-logging.js.map +1 -1
  19. package/dist/esm/preset/isomorphic/utils/fetch-logging.js +29 -0
  20. package/dist/esm/preset/isomorphic/utils/fetch-logging.js.map +1 -1
  21. package/dist/esm/preset/server/providers/known-http-api-hosts.js +3 -1
  22. package/dist/esm/preset/server/providers/known-http-api-hosts.js.map +1 -1
  23. package/dist/esm/preset/web/providers/known-http-api-hosts.js +3 -1
  24. package/dist/esm/preset/web/providers/known-http-api-hosts.js.map +1 -1
  25. package/dist/types/http/utils.d.ts +16 -0
  26. package/dist/types/http/utils.d.ts.map +1 -1
  27. package/dist/types/preset/isomorphic/types.d.ts +1 -1
  28. package/dist/types/preset/isomorphic/types.d.ts.map +1 -1
  29. package/dist/types/preset/isomorphic/utils/axios-logging.d.ts.map +1 -1
  30. package/dist/types/preset/isomorphic/utils/fetch-logging.d.ts.map +1 -1
  31. package/dist/types/preset/server/providers/known-http-api-hosts.d.ts.map +1 -1
  32. package/dist/types/preset/web/providers/known-http-api-hosts.d.ts.map +1 -1
  33. package/package.json +4 -4
@@ -4,6 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.FetchUtil = void 0;
7
+ exports.isAbortError = isAbortError;
8
+ exports.isNetworkError = isNetworkError;
7
9
  /**
8
10
  * Утилиты для работы с URL, URLSearchParams, Headers, Request, Response.
9
11
  */
@@ -94,4 +96,64 @@ const FetchUtil = exports.FetchUtil = {
94
96
  })];
95
97
  }
96
98
  };
99
+
100
+ /**
101
+ * Проверяет, является ли переданное значение ошибкой.
102
+ * @param value Значение.
103
+ * @return Является ли значение ошибкой.
104
+ */
105
+ function isError(value) {
106
+ return Object.prototype.toString.call(value) === '[object Error]';
107
+ }
108
+
109
+ // Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error
110
+ const networkErrorMessages = new Set(['network error',
111
+ // Chrome
112
+ 'Failed to fetch',
113
+ // Chrome
114
+ 'NetworkError when attempting to fetch resource.',
115
+ // Firefox
116
+ 'The Internet connection appears to be offline.',
117
+ // Safari 16
118
+ 'Load failed',
119
+ // Safari 17+
120
+ 'Network request failed',
121
+ // `cross-fetch`
122
+ 'fetch failed',
123
+ // Undici (Node.js)
124
+ 'terminated',
125
+ // Undici (Node.js)
126
+
127
+ // дальше идут наши наработки (основано на данных из Sentry)
128
+ 'Network Error' // Safari 17.4
129
+ ]);
130
+
131
+ /**
132
+ * Проверяет, является ли переданное значение ошибкой сети.
133
+ * Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error.
134
+ * Нет возможности использовать пакет is-network-error по причине того что он - ESM only.
135
+ * @param value Проверяемое значение.
136
+ * @return Является ли значение TypeError о том что произошла ошибка сети.
137
+ */
138
+ function isNetworkError(value) {
139
+ const isValid = isError(value) && value.name === 'TypeError' && typeof value.message === 'string';
140
+ if (!isValid) {
141
+ return false;
142
+ }
143
+
144
+ // ВАЖНО: в Safari 17+ ошибки имеют определенное сообщение и не имеют свойства stack
145
+ if (value.message === 'Load failed') {
146
+ return value.stack === undefined;
147
+ }
148
+ return networkErrorMessages.has(value.message);
149
+ }
150
+
151
+ /**
152
+ * Проверяет является ли переданное значение ошибкой обрывания с помощью AbortController.
153
+ * @param value Проверяемое значение.
154
+ * @return Является ли значение ошибкой обрывания.
155
+ */
156
+ function isAbortError(value) {
157
+ return typeof value === 'object' && value !== null && value.name === 'AbortError';
158
+ }
97
159
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["FetchUtil","exports","setParams","url","params","paramName","paramValue","Object","entries","searchParams","delete","undefined","set","String","withParams","resultUrl","URL","withoutParams","search","eitherResponse","parseBody","response","json","parse","ok","data","error","Error","status","statusText","headers"],"sources":["../../../src/http/utils.ts"],"sourcesContent":["import type { URLSearchParamsInit, ResponseDone, ResponseFail } from './types';\n\n/**\n * Утилиты для работы с URL, URLSearchParams, Headers, Request, Response.\n */\nexport const FetchUtil = {\n /**\n * Получив параметры применит их к переданному URL.\n * @param url URL.\n * @param params Параметры.\n */\n setParams(url: URL, params: URLSearchParamsInit): void {\n for (const [paramName, paramValue] of Object.entries(params)) {\n if (paramValue === null) {\n url.searchParams.delete(paramName);\n continue;\n }\n\n if (paramValue !== undefined) {\n url.searchParams.set(paramName, String(paramValue));\n continue;\n }\n }\n },\n\n // @todo resetPrams?\n\n /**\n * Получив URL и параметры вернет новый URL с примененными параметрами.\n * @param url URL.\n * @param params Параметры.\n * @return URL.\n */\n withParams(url: string | URL, params: URLSearchParamsInit): URL {\n const resultUrl = new URL(url);\n\n FetchUtil.setParams(resultUrl, params);\n\n return resultUrl;\n },\n\n /**\n * Получив URL вернет его копию но без параметров.\n * @param url URL.\n * @return URL.\n */\n withoutParams(url: string | URL): URL {\n const resultUrl = new URL(url);\n\n resultUrl.search = '';\n\n return resultUrl;\n },\n\n /**\n * Возвращает кортеж обработчиков для Promise из fetch.\n * Полученный Promise никогда не уйдет в состояние rejected.\n * @param options Опции.\n * @return Кортеж.\n */\n eitherResponse<T = unknown>({\n parseBody = response => response.json(),\n }: {\n /** Парсер body. */\n parseBody?: (response: Response) => Promise<T>;\n } = {}) {\n /** @inheritdoc */\n const parse = async (response: Response): Promise<T | null> => {\n try {\n return await parseBody(response);\n } catch {\n return null;\n }\n };\n\n return [\n // then\n async (response: Response): Promise<ResponseDone<T> | ResponseFail<T>> => {\n if (!response.ok) {\n return {\n ok: false,\n data: (await parse(response)) as T,\n error: new Error(`Request failed with status code ${response.status}`),\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n };\n }\n\n return {\n ok: true,\n data: (await parse(response)) as T,\n error: null,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n };\n },\n\n // catch\n async (error: unknown): Promise<ResponseFail<T>> => ({\n ok: false,\n error,\n }),\n ] as const;\n },\n} as const;\n"],"mappings":";;;;;;AAEA;AACA;AACA;AACO,MAAMA,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG;EACvB;AACF;AACA;AACA;AACA;EACEE,SAASA,CAACC,GAAQ,EAAEC,MAA2B,EAAQ;IACrD,KAAK,MAAM,CAACC,SAAS,EAAEC,UAAU,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,MAAM,CAAC,EAAE;MAC5D,IAAIE,UAAU,KAAK,IAAI,EAAE;QACvBH,GAAG,CAACM,YAAY,CAACC,MAAM,CAACL,SAAS,CAAC;QAClC;MACF;MAEA,IAAIC,UAAU,KAAKK,SAAS,EAAE;QAC5BR,GAAG,CAACM,YAAY,CAACG,GAAG,CAACP,SAAS,EAAEQ,MAAM,CAACP,UAAU,CAAC,CAAC;QACnD;MACF;IACF;EACF,CAAC;EAED;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEQ,UAAUA,CAACX,GAAiB,EAAEC,MAA2B,EAAO;IAC9D,MAAMW,SAAS,GAAG,IAAIC,GAAG,CAACb,GAAG,CAAC;IAE9BH,SAAS,CAACE,SAAS,CAACa,SAAS,EAAEX,MAAM,CAAC;IAEtC,OAAOW,SAAS;EAClB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,aAAaA,CAACd,GAAiB,EAAO;IACpC,MAAMY,SAAS,GAAG,IAAIC,GAAG,CAACb,GAAG,CAAC;IAE9BY,SAAS,CAACG,MAAM,GAAG,EAAE;IAErB,OAAOH,SAAS;EAClB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEI,cAAcA,CAAc;IAC1BC,SAAS,GAAGC,QAAQ,IAAIA,QAAQ,CAACC,IAAI,CAAC;EAIxC,CAAC,GAAG,CAAC,CAAC,EAAE;IACN;IACA,MAAMC,KAAK,GAAG,MAAOF,QAAkB,IAAwB;MAC7D,IAAI;QACF,OAAO,MAAMD,SAAS,CAACC,QAAQ,CAAC;MAClC,CAAC,CAAC,MAAM;QACN,OAAO,IAAI;MACb;IACF,CAAC;IAED,OAAO;IACL;IACA,MAAOA,QAAkB,IAAiD;MACxE,IAAI,CAACA,QAAQ,CAACG,EAAE,EAAE;QAChB,OAAO;UACLA,EAAE,EAAE,KAAK;UACTC,IAAI,EAAG,MAAMF,KAAK,CAACF,QAAQ,CAAO;UAClCK,KAAK,EAAE,IAAIC,KAAK,CAAE,mCAAkCN,QAAQ,CAACO,MAAO,EAAC,CAAC;UACtEA,MAAM,EAAEP,QAAQ,CAACO,MAAM;UACvBC,UAAU,EAAER,QAAQ,CAACQ,UAAU;UAC/BC,OAAO,EAAET,QAAQ,CAACS;QACpB,CAAC;MACH;MAEA,OAAO;QACLN,EAAE,EAAE,IAAI;QACRC,IAAI,EAAG,MAAMF,KAAK,CAACF,QAAQ,CAAO;QAClCK,KAAK,EAAE,IAAI;QACXE,MAAM,EAAEP,QAAQ,CAACO,MAAM;QACvBC,UAAU,EAAER,QAAQ,CAACQ,UAAU;QAC/BC,OAAO,EAAET,QAAQ,CAACS;MACpB,CAAC;IACH,CAAC;IAED;IACA,MAAOJ,KAAc,KAAgC;MACnDF,EAAE,EAAE,KAAK;MACTE;IACF,CAAC,CAAC,CACH;EACH;AACF,CAAU"}
1
+ {"version":3,"file":"utils.js","names":["FetchUtil","exports","setParams","url","params","paramName","paramValue","Object","entries","searchParams","delete","undefined","set","String","withParams","resultUrl","URL","withoutParams","search","eitherResponse","parseBody","response","json","parse","ok","data","error","Error","status","statusText","headers","isError","value","prototype","toString","call","networkErrorMessages","Set","isNetworkError","isValid","name","message","stack","has","isAbortError"],"sources":["../../../src/http/utils.ts"],"sourcesContent":["import type { URLSearchParamsInit, ResponseDone, ResponseFail } from './types';\n\n/**\n * Утилиты для работы с URL, URLSearchParams, Headers, Request, Response.\n */\nexport const FetchUtil = {\n /**\n * Получив параметры применит их к переданному URL.\n * @param url URL.\n * @param params Параметры.\n */\n setParams(url: URL, params: URLSearchParamsInit): void {\n for (const [paramName, paramValue] of Object.entries(params)) {\n if (paramValue === null) {\n url.searchParams.delete(paramName);\n continue;\n }\n\n if (paramValue !== undefined) {\n url.searchParams.set(paramName, String(paramValue));\n continue;\n }\n }\n },\n\n // @todo resetPrams?\n\n /**\n * Получив URL и параметры вернет новый URL с примененными параметрами.\n * @param url URL.\n * @param params Параметры.\n * @return URL.\n */\n withParams(url: string | URL, params: URLSearchParamsInit): URL {\n const resultUrl = new URL(url);\n\n FetchUtil.setParams(resultUrl, params);\n\n return resultUrl;\n },\n\n /**\n * Получив URL вернет его копию но без параметров.\n * @param url URL.\n * @return URL.\n */\n withoutParams(url: string | URL): URL {\n const resultUrl = new URL(url);\n\n resultUrl.search = '';\n\n return resultUrl;\n },\n\n /**\n * Возвращает кортеж обработчиков для Promise из fetch.\n * Полученный Promise никогда не уйдет в состояние rejected.\n * @param options Опции.\n * @return Кортеж.\n */\n eitherResponse<T = unknown>({\n parseBody = response => response.json(),\n }: {\n /** Парсер body. */\n parseBody?: (response: Response) => Promise<T>;\n } = {}) {\n /** @inheritdoc */\n const parse = async (response: Response): Promise<T | null> => {\n try {\n return await parseBody(response);\n } catch {\n return null;\n }\n };\n\n return [\n // then\n async (response: Response): Promise<ResponseDone<T> | ResponseFail<T>> => {\n if (!response.ok) {\n return {\n ok: false,\n data: (await parse(response)) as T,\n error: new Error(`Request failed with status code ${response.status}`),\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n };\n }\n\n return {\n ok: true,\n data: (await parse(response)) as T,\n error: null,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n };\n },\n\n // catch\n async (error: unknown): Promise<ResponseFail<T>> => ({\n ok: false,\n error,\n }),\n ] as const;\n },\n} as const;\n\n/**\n * Проверяет, является ли переданное значение ошибкой.\n * @param value Значение.\n * @return Является ли значение ошибкой.\n */\nfunction isError(value: unknown): value is Error {\n return Object.prototype.toString.call(value) === '[object Error]';\n}\n\n// Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error\nconst networkErrorMessages = new Set([\n 'network error', // Chrome\n 'Failed to fetch', // Chrome\n 'NetworkError when attempting to fetch resource.', // Firefox\n 'The Internet connection appears to be offline.', // Safari 16\n 'Load failed', // Safari 17+\n 'Network request failed', // `cross-fetch`\n 'fetch failed', // Undici (Node.js)\n 'terminated', // Undici (Node.js)\n\n // дальше идут наши наработки (основано на данных из Sentry)\n 'Network Error', // Safari 17.4\n]);\n\n/**\n * Проверяет, является ли переданное значение ошибкой сети.\n * Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error.\n * Нет возможности использовать пакет is-network-error по причине того что он - ESM only.\n * @param value Проверяемое значение.\n * @return Является ли значение TypeError о том что произошла ошибка сети.\n */\nexport function isNetworkError(value: unknown): value is TypeError {\n const isValid = isError(value) && value.name === 'TypeError' && typeof value.message === 'string';\n\n if (!isValid) {\n return false;\n }\n\n // ВАЖНО: в Safari 17+ ошибки имеют определенное сообщение и не имеют свойства stack\n if (value.message === 'Load failed') {\n return value.stack === undefined;\n }\n\n return networkErrorMessages.has(value.message);\n}\n\n/**\n * Проверяет является ли переданное значение ошибкой обрывания с помощью AbortController.\n * @param value Проверяемое значение.\n * @return Является ли значение ошибкой обрывания.\n */\nexport function isAbortError(value: unknown): value is { name: 'AbortError' } {\n return typeof value === 'object' && value !== null && (value as any).name === 'AbortError';\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "@sima-land/isomorph",
4
- "version": "11.0.0-alpha.52",
4
+ "version": "11.0.0-alpha.53",
5
5
  "dependencies": {
6
6
  "@humanwhocodes/env": "^3.0.5",
7
7
  "@krutoo/fetch-tools": "^0.0.16",
@@ -14,9 +14,9 @@
14
14
  "@opentelemetry/sdk-trace-base": "^1.25.1",
15
15
  "@opentelemetry/sdk-trace-node": "^1.25.1",
16
16
  "@opentelemetry/semantic-conventions": "^1.25.1",
17
- "@sentry/browser": "^8.13.0",
18
- "@sentry/bun": "^8.13.0",
19
- "@sentry/node": "^8.13.0",
17
+ "@sentry/browser": "^8.33.1",
18
+ "@sentry/bun": "^8.33.1",
19
+ "@sentry/node": "^8.33.1",
20
20
  "accepts": "^1.3.8",
21
21
  "dotenv": "^16.3.1",
22
22
  "express": "^4.21.0",
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/isomorphic/types.ts"],"sourcesContent":["import type { Provider, Token } from '../../di';\n\nexport interface PresetTuner {\n (tools: { override: <T>(token: Token<T>, provider: Provider<T>) => void }): void;\n}\n\nexport type KnownHttpApiKey = 'ilium' | 'simaV3' | 'simaV4' | 'simaV6' | 'chponkiV2';\n\n/**\n * Строгая версия Map без возможности добавлять/удалять.\n */\nexport interface StrictMap<Key extends string> {\n /** Возвращает значение по ключу. */\n get(key: Key): string;\n}\n\n/**\n * Внутренний интерфейс для хранения ссылок на ассеты.\n */\nexport interface PageAssets {\n js: string;\n css: string;\n criticalJs?: string;\n criticalCss?: string;\n}\n\n/**\n * Структура ответа от frontend-микросервиса в формате JSON по соглашению.\n */\nexport interface ConventionalJson {\n markup: string;\n bundle_js: string;\n bundle_css: string;\n critical_js?: string;\n critical_css?: string;\n meta?: any;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/isomorphic/types.ts"],"sourcesContent":["import type { Provider, Token } from '../../di';\n\nexport interface PresetTuner {\n (tools: { override: <T>(token: Token<T>, provider: Provider<T>) => void }): void;\n}\n\nexport type KnownHttpApiKey =\n | 'ilium'\n | 'simaV3'\n | 'simaV4'\n | 'simaV6'\n | 'chponkiV2'\n | 'shuttle'\n | 'fileDispatcher';\n\n/**\n * Строгая версия Map без возможности добавлять/удалять.\n */\nexport interface StrictMap<Key extends string> {\n /** Возвращает значение по ключу. */\n get(key: Key): string;\n}\n\n/**\n * Внутренний интерфейс для хранения ссылок на ассеты.\n */\nexport interface PageAssets {\n js: string;\n css: string;\n criticalJs?: string;\n criticalCss?: string;\n}\n\n/**\n * Структура ответа от frontend-микросервиса в формате JSON по соглашению.\n */\nexport interface ConventionalJson {\n markup: string;\n bundle_js: string;\n bundle_css: string;\n critical_js?: string;\n critical_css?: string;\n meta?: any;\n}\n"],"mappings":""}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AxiosLogging = void 0;
7
+ var _utils = require("../../../http/utils");
7
8
  var _log = require("../../../log");
8
9
  var _axios = require("../../../utils/axios");
9
10
  var _disableable = require("./disableable");
@@ -93,54 +94,71 @@ class AxiosLogging extends _disableable.Disableable {
93
94
  if (this.isDisabled()) {
94
95
  return;
95
96
  }
96
- if (_axios2.default.isAxiosError(error)) {
97
- const {
98
- requestInfo
99
- } = this;
100
- const statusCode = error.response?.status || 'UNKNOWN';
101
97
 
102
- // @todo выяснить: нужно ли нам отправлять ответы с кодом <500 в Sentry на уровне всех команд
103
- // если да то можно добавить метод в духе errorStatusFilter(s => s !== 422)
104
- this.logger.error(new _log.DetailedError(`HTTP request failed, status code: ${statusCode}, error message: ${error.message}`, {
105
- level: (0, _severityFromStatus.severityFromStatus)(error.response?.status),
106
- context: [{
107
- key: 'Request details',
108
- data: {
109
- url: requestInfo.url,
110
- baseURL: requestInfo.baseURL,
111
- method: requestInfo.method,
112
- headers: requestInfo.headers,
113
- data: requestInfo.data,
114
- params: requestInfo.params
115
- }
116
- }, {
117
- key: 'Response details',
118
- data: {
119
- data: error.response?.data,
120
- // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)
121
- headers: {
122
- ...error.response?.headers
123
- },
124
- error: error.toJSON()
125
- }
126
- }]
127
- }));
128
- if (typeof statusCode === 'number') {
129
- this.logger.info(new _log.Breadcrumb({
130
- category: 'http.response',
131
- type: 'http',
132
- data: {
133
- url: requestInfo.readyURL,
134
- method: requestInfo.method,
135
- status_code: statusCode,
136
- params: requestInfo.params
137
- },
138
- level: 'error'
139
- }));
140
- }
141
- } else {
98
+ // если это не AxiosError тогда выполняем простое логирование
99
+ if (!_axios2.default.isAxiosError(error)) {
142
100
  this.logger.error(error);
101
+ return;
102
+ }
103
+ const statusCode = error.response?.status ?? 'UNKNOWN';
104
+ const {
105
+ requestInfo
106
+ } = this;
107
+ if (typeof statusCode === 'number') {
108
+ this.logger.info(new _log.Breadcrumb({
109
+ category: 'http.response',
110
+ type: 'http',
111
+ data: {
112
+ url: requestInfo.readyURL,
113
+ method: requestInfo.method,
114
+ status_code: statusCode,
115
+ params: requestInfo.params
116
+ },
117
+ level: 'error'
118
+ }));
143
119
  }
120
+
121
+ // по общему соглашению фильтруем сетевые ошибки
122
+ if ((0, _utils.isNetworkError)(error.cause)) {
123
+ return;
124
+ }
125
+
126
+ // по общему соглашению фильтруем ошибки обрывания
127
+ if ((0, _utils.isAbortError)(error.cause)) {
128
+ return;
129
+ }
130
+
131
+ // по общему соглашению фильтруем все статусы < 500
132
+ if (typeof statusCode === 'number' && statusCode < 500) {
133
+ return;
134
+ }
135
+
136
+ // @todo добавить метод в духе errorStatusFilter(s => s !== 422)
137
+
138
+ this.logger.error(new _log.DetailedError(`HTTP request failed, status code: ${statusCode}, error message: ${error.message}`, {
139
+ level: (0, _severityFromStatus.severityFromStatus)(error.response?.status),
140
+ context: [{
141
+ key: 'Request details',
142
+ data: {
143
+ url: requestInfo.url,
144
+ baseURL: requestInfo.baseURL,
145
+ method: requestInfo.method,
146
+ headers: requestInfo.headers,
147
+ data: requestInfo.data,
148
+ params: requestInfo.params
149
+ }
150
+ }, {
151
+ key: 'Response details',
152
+ data: {
153
+ data: error.response?.data,
154
+ // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)
155
+ headers: {
156
+ ...error.response?.headers
157
+ },
158
+ error: error.toJSON()
159
+ }
160
+ }]
161
+ }));
144
162
  }
145
163
  }
146
164
  exports.AxiosLogging = AxiosLogging;
@@ -1 +1 @@
1
- {"version":3,"file":"axios-logging.js","names":["_log","require","_axios","_disableable","_displayUrl","_severityFromStatus","_axios2","_interopRequireDefault","obj","__esModule","default","AxiosLogging","Disableable","constructor","logger","data","config","applyAxiosDefaults","defaults","requestInfo","readyURL","displayUrl","baseURL","url","beforeRequest","isDisabled","method","params","info","Breadcrumb","category","type","level","afterResponse","response","status_code","status","onCatch","error","axios","isAxiosError","statusCode","DetailedError","message","severityFromStatus","context","key","headers","toJSON","exports"],"sources":["../../../../../src/preset/isomorphic/utils/axios-logging.ts"],"sourcesContent":["import { Breadcrumb, DetailedError, type Logger } from '../../../log';\nimport {\n type LogMiddlewareHandler,\n applyAxiosDefaults,\n SharedData,\n DoneSharedData,\n FailSharedData,\n} from '../../../utils/axios';\nimport { Disableable } from './disableable';\nimport { displayUrl } from './display-url';\nimport { severityFromStatus } from './severity-from-status';\nimport axios from 'axios';\n\n/**\n * Обработчик для промежуточного слоя логирования исходящих http-запросов.\n * Отправляет хлебные крошки и данные ошибки, пригодные для Sentry.\n */\nexport class AxiosLogging extends Disableable implements LogMiddlewareHandler {\n logger: Logger;\n\n protected readonly requestInfo: ReturnType<typeof applyAxiosDefaults> & {\n readyURL: string;\n };\n\n /**\n * Конструктор.\n * @param logger Logger.\n * @param data Данные запроса.\n */\n constructor(logger: Logger, data: SharedData) {\n super();\n const config = applyAxiosDefaults(data.config, data.defaults);\n\n this.logger = logger;\n\n this.requestInfo = {\n ...config,\n readyURL: displayUrl(config.baseURL, config.url),\n };\n }\n\n /**\n * Отправит хлебные крошки перед запросом.\n */\n beforeRequest() {\n if (this.isDisabled()) {\n return;\n }\n\n const { readyURL, method, params } = this.requestInfo;\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.request',\n type: 'http',\n data: {\n url: readyURL,\n method,\n params,\n },\n level: 'info',\n }),\n );\n }\n\n /**\n * Отправит хлебные крошки после запроса.\n * @param data Данные ответа.\n */\n afterResponse({ response }: DoneSharedData) {\n if (this.isDisabled()) {\n return;\n }\n\n const { readyURL, method, params } = this.requestInfo;\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: readyURL,\n method,\n status_code: response.status,\n params,\n },\n level: 'info',\n }),\n );\n }\n\n /**\n * Отправит данные ошибки при перехвате.\n * @param data Данные запроса.\n */\n onCatch({ error }: FailSharedData) {\n if (this.isDisabled()) {\n return;\n }\n\n if (axios.isAxiosError(error)) {\n const { requestInfo } = this;\n const statusCode = error.response?.status || 'UNKNOWN';\n\n // @todo выяснить: нужно ли нам отправлять ответы с кодом <500 в Sentry на уровне всех команд\n // если да то можно добавить метод в духе errorStatusFilter(s => s !== 422)\n this.logger.error(\n new DetailedError(\n `HTTP request failed, status code: ${statusCode}, error message: ${error.message}`,\n {\n level: severityFromStatus(error.response?.status),\n context: [\n {\n key: 'Request details',\n data: {\n url: requestInfo.url,\n baseURL: requestInfo.baseURL,\n method: requestInfo.method,\n headers: requestInfo.headers,\n data: requestInfo.data,\n params: requestInfo.params,\n },\n },\n {\n key: 'Response details',\n data: {\n data: error.response?.data,\n\n // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)\n headers: { ...error.response?.headers },\n\n error: error.toJSON(),\n },\n },\n ],\n },\n ),\n );\n\n if (typeof statusCode === 'number') {\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: requestInfo.readyURL,\n method: requestInfo.method,\n status_code: statusCode,\n params: requestInfo.params,\n },\n level: 'error',\n }),\n );\n }\n } else {\n this.logger.error(error);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"axios-logging.js","names":["_utils","require","_log","_axios","_disableable","_displayUrl","_severityFromStatus","_axios2","_interopRequireDefault","obj","__esModule","default","AxiosLogging","Disableable","constructor","logger","data","config","applyAxiosDefaults","defaults","requestInfo","readyURL","displayUrl","baseURL","url","beforeRequest","isDisabled","method","params","info","Breadcrumb","category","type","level","afterResponse","response","status_code","status","onCatch","error","axios","isAxiosError","statusCode","isNetworkError","cause","isAbortError","DetailedError","message","severityFromStatus","context","key","headers","toJSON","exports"],"sources":["../../../../../src/preset/isomorphic/utils/axios-logging.ts"],"sourcesContent":["import { isAbortError, isNetworkError } from '../../../http/utils';\nimport { Breadcrumb, DetailedError, type Logger } from '../../../log';\nimport {\n type LogMiddlewareHandler,\n applyAxiosDefaults,\n SharedData,\n DoneSharedData,\n FailSharedData,\n} from '../../../utils/axios';\nimport { Disableable } from './disableable';\nimport { displayUrl } from './display-url';\nimport { severityFromStatus } from './severity-from-status';\nimport axios from 'axios';\n\n/**\n * Обработчик для промежуточного слоя логирования исходящих http-запросов.\n * Отправляет хлебные крошки и данные ошибки, пригодные для Sentry.\n */\nexport class AxiosLogging extends Disableable implements LogMiddlewareHandler {\n logger: Logger;\n\n protected readonly requestInfo: ReturnType<typeof applyAxiosDefaults> & {\n readyURL: string;\n };\n\n /**\n * Конструктор.\n * @param logger Logger.\n * @param data Данные запроса.\n */\n constructor(logger: Logger, data: SharedData) {\n super();\n const config = applyAxiosDefaults(data.config, data.defaults);\n\n this.logger = logger;\n\n this.requestInfo = {\n ...config,\n readyURL: displayUrl(config.baseURL, config.url),\n };\n }\n\n /**\n * Отправит хлебные крошки перед запросом.\n */\n beforeRequest() {\n if (this.isDisabled()) {\n return;\n }\n\n const { readyURL, method, params } = this.requestInfo;\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.request',\n type: 'http',\n data: {\n url: readyURL,\n method,\n params,\n },\n level: 'info',\n }),\n );\n }\n\n /**\n * Отправит хлебные крошки после запроса.\n * @param data Данные ответа.\n */\n afterResponse({ response }: DoneSharedData) {\n if (this.isDisabled()) {\n return;\n }\n\n const { readyURL, method, params } = this.requestInfo;\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: readyURL,\n method,\n status_code: response.status,\n params,\n },\n level: 'info',\n }),\n );\n }\n\n /**\n * Отправит данные ошибки при перехвате.\n * @param data Данные запроса.\n */\n onCatch({ error }: FailSharedData) {\n if (this.isDisabled()) {\n return;\n }\n\n // если это не AxiosError тогда выполняем простое логирование\n if (!axios.isAxiosError(error)) {\n this.logger.error(error);\n return;\n }\n\n const statusCode = error.response?.status ?? 'UNKNOWN';\n const { requestInfo } = this;\n\n if (typeof statusCode === 'number') {\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: requestInfo.readyURL,\n method: requestInfo.method,\n status_code: statusCode,\n params: requestInfo.params,\n },\n level: 'error',\n }),\n );\n }\n\n // по общему соглашению фильтруем сетевые ошибки\n if (isNetworkError(error.cause)) {\n return;\n }\n\n // по общему соглашению фильтруем ошибки обрывания\n if (isAbortError(error.cause)) {\n return;\n }\n\n // по общему соглашению фильтруем все статусы < 500\n if (typeof statusCode === 'number' && statusCode < 500) {\n return;\n }\n\n // @todo добавить метод в духе errorStatusFilter(s => s !== 422)\n\n this.logger.error(\n new DetailedError(\n `HTTP request failed, status code: ${statusCode}, error message: ${error.message}`,\n {\n level: severityFromStatus(error.response?.status),\n context: [\n {\n key: 'Request details',\n data: {\n url: requestInfo.url,\n baseURL: requestInfo.baseURL,\n method: requestInfo.method,\n headers: requestInfo.headers,\n data: requestInfo.data,\n params: requestInfo.params,\n },\n },\n {\n key: 'Response details',\n data: {\n data: error.response?.data,\n\n // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)\n headers: { ...error.response?.headers },\n\n error: error.toJSON(),\n },\n },\n ],\n },\n ),\n );\n }\n}\n"],"mappings":"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"}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.FetchLogging = void 0;
7
7
  var _http = require("../../../http");
8
+ var _utils = require("../../../http/utils");
8
9
  var _log = require("../../../log");
9
10
  var _disableable = require("./disableable");
10
11
  /**
@@ -55,6 +56,24 @@ class FetchLogging extends _disableable.Disableable {
55
56
  },
56
57
  level: response.ok ? 'info' : 'error'
57
58
  }));
59
+
60
+ // по общему соглашению фильтруем все статусы < 500
61
+ if (response.status < 500) {
62
+ return;
63
+ }
64
+ this.logger.error(new _log.DetailedError(`HTTP request failed, status code: ${response.status}`, {
65
+ level: 'error',
66
+ context: [{
67
+ key: 'Outgoing request details',
68
+ data: {
69
+ url: _http.FetchUtil.withoutParams(request.url).href,
70
+ method: request.method,
71
+ headers: request.headers,
72
+ params: Object.fromEntries(new URL(request.url).searchParams.entries())
73
+ // @todo data
74
+ }
75
+ }]
76
+ }));
58
77
  }
59
78
 
60
79
  /** @inheritdoc */
@@ -65,6 +84,16 @@ class FetchLogging extends _disableable.Disableable {
65
84
  if (this.isDisabled()) {
66
85
  return;
67
86
  }
87
+
88
+ // по общему соглашению фильтруем сетевые ошибки
89
+ if ((0, _utils.isNetworkError)(error)) {
90
+ return;
91
+ }
92
+
93
+ // по общему соглашению фильтруем ошибки обрывания
94
+ if ((0, _utils.isAbortError)(error)) {
95
+ return;
96
+ }
68
97
  this.logger.error(new _log.DetailedError(String(error), {
69
98
  level: 'error',
70
99
  context: [{
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-logging.js","names":["_http","require","_log","_disableable","FetchLogging","Disableable","constructor","logger","onRequest","request","isDisabled","info","Breadcrumb","category","type","data","url","FetchUtil","withoutParams","href","method","params","Object","fromEntries","URL","searchParams","entries","level","onResponse","response","status_code","status","ok","onCatch","error","DetailedError","String","context","key","headers","exports"],"sources":["../../../../../src/preset/isomorphic/utils/fetch-logging.ts"],"sourcesContent":["import { LogHandler, LogData, DoneLogData, FetchUtil, FailLogData } from '../../../http';\nimport { Breadcrumb, DetailedError, Logger } from '../../../log';\nimport { Disableable } from './disableable';\n\n/**\n * Обработчик логирования внешних http-запросов.\n */\nexport class FetchLogging extends Disableable implements LogHandler {\n logger: Logger;\n\n /** @inheritdoc */\n constructor(logger: Logger) {\n super();\n this.logger = logger;\n }\n\n /** @inheritdoc */\n onRequest({ request }: LogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.request',\n type: 'http',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n },\n level: 'info',\n }),\n );\n }\n\n /** @inheritdoc */\n onResponse({ response, request }: DoneLogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n status_code: response.status,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n },\n level: response.ok ? 'info' : 'error',\n }),\n );\n }\n\n /** @inheritdoc */\n onCatch({ error, request }: FailLogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.error(\n new DetailedError(String(error), {\n level: 'error',\n context: [\n {\n key: 'Outgoing request details',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n headers: request.headers,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n // @todo data\n },\n },\n ],\n }),\n );\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACO,MAAMG,YAAY,SAASC,wBAAW,CAAuB;EAGlE;EACAC,WAAWA,CAACC,MAAc,EAAE;IAC1B,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;;EAEA;EACAC,SAASA,CAAC;IAAEC;EAAiB,CAAC,EAAE;IAC9B,IAAI,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE;MACrB;IACF;IAEA,IAAI,CAACH,MAAM,CAACI,IAAI,CACd,IAAIC,eAAU,CAAC;MACbC,QAAQ,EAAE,cAAc;MACxBC,IAAI,EAAE,MAAM;MACZC,IAAI,EAAE;QACJC,GAAG,EAAEC,eAAS,CAACC,aAAa,CAACT,OAAO,CAACO,GAAG,CAAC,CAACG,IAAI;QAC9CC,MAAM,EAAEX,OAAO,CAACW,MAAM;QACtBC,MAAM,EAAEC,MAAM,CAACC,WAAW,CAAC,IAAIC,GAAG,CAACf,OAAO,CAACO,GAAG,CAAC,CAACS,YAAY,CAACC,OAAO,CAAC,CAAC;MACxE,CAAC;MACDC,KAAK,EAAE;IACT,CAAC,CACH,CAAC;EACH;;EAEA;EACAC,UAAUA,CAAC;IAAEC,QAAQ;IAAEpB;EAAqB,CAAC,EAAE;IAC7C,IAAI,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE;MACrB;IACF;IAEA,IAAI,CAACH,MAAM,CAACI,IAAI,CACd,IAAIC,eAAU,CAAC;MACbC,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE,MAAM;MACZC,IAAI,EAAE;QACJC,GAAG,EAAEC,eAAS,CAACC,aAAa,CAACT,OAAO,CAACO,GAAG,CAAC,CAACG,IAAI;QAC9CC,MAAM,EAAEX,OAAO,CAACW,MAAM;QACtBU,WAAW,EAAED,QAAQ,CAACE,MAAM;QAC5BV,MAAM,EAAEC,MAAM,CAACC,WAAW,CAAC,IAAIC,GAAG,CAACf,OAAO,CAACO,GAAG,CAAC,CAACS,YAAY,CAACC,OAAO,CAAC,CAAC;MACxE,CAAC;MACDC,KAAK,EAAEE,QAAQ,CAACG,EAAE,GAAG,MAAM,GAAG;IAChC,CAAC,CACH,CAAC;EACH;;EAEA;EACAC,OAAOA,CAAC;IAAEC,KAAK;IAAEzB;EAAqB,CAAC,EAAE;IACvC,IAAI,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE;MACrB;IACF;IAEA,IAAI,CAACH,MAAM,CAAC2B,KAAK,CACf,IAAIC,kBAAa,CAACC,MAAM,CAACF,KAAK,CAAC,EAAE;MAC/BP,KAAK,EAAE,OAAO;MACdU,OAAO,EAAE,CACP;QACEC,GAAG,EAAE,0BAA0B;QAC/BvB,IAAI,EAAE;UACJC,GAAG,EAAEC,eAAS,CAACC,aAAa,CAACT,OAAO,CAACO,GAAG,CAAC,CAACG,IAAI;UAC9CC,MAAM,EAAEX,OAAO,CAACW,MAAM;UACtBmB,OAAO,EAAE9B,OAAO,CAAC8B,OAAO;UACxBlB,MAAM,EAAEC,MAAM,CAACC,WAAW,CAAC,IAAIC,GAAG,CAACf,OAAO,CAACO,GAAG,CAAC,CAACS,YAAY,CAACC,OAAO,CAAC,CAAC;UACtE;QACF;MACF,CAAC;IAEL,CAAC,CACH,CAAC;EACH;AACF;AAACc,OAAA,CAAApC,YAAA,GAAAA,YAAA"}
1
+ {"version":3,"file":"fetch-logging.js","names":["_http","require","_utils","_log","_disableable","FetchLogging","Disableable","constructor","logger","onRequest","request","isDisabled","info","Breadcrumb","category","type","data","url","FetchUtil","withoutParams","href","method","params","Object","fromEntries","URL","searchParams","entries","level","onResponse","response","status_code","status","ok","error","DetailedError","context","key","headers","onCatch","isNetworkError","isAbortError","String","exports"],"sources":["../../../../../src/preset/isomorphic/utils/fetch-logging.ts"],"sourcesContent":["import { LogHandler, LogData, DoneLogData, FetchUtil, FailLogData } from '../../../http';\nimport { isAbortError, isNetworkError } from '../../../http/utils';\nimport { Breadcrumb, DetailedError, Logger } from '../../../log';\nimport { Disableable } from './disableable';\n\n/**\n * Обработчик логирования внешних http-запросов.\n */\nexport class FetchLogging extends Disableable implements LogHandler {\n logger: Logger;\n\n /** @inheritdoc */\n constructor(logger: Logger) {\n super();\n this.logger = logger;\n }\n\n /** @inheritdoc */\n onRequest({ request }: LogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.request',\n type: 'http',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n },\n level: 'info',\n }),\n );\n }\n\n /** @inheritdoc */\n onResponse({ response, request }: DoneLogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n status_code: response.status,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n },\n level: response.ok ? 'info' : 'error',\n }),\n );\n\n // по общему соглашению фильтруем все статусы < 500\n if (response.status < 500) {\n return;\n }\n\n this.logger.error(\n new DetailedError(`HTTP request failed, status code: ${response.status}`, {\n level: 'error',\n context: [\n {\n key: 'Outgoing request details',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n headers: request.headers,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n // @todo data\n },\n },\n ],\n }),\n );\n }\n\n /** @inheritdoc */\n onCatch({ error, request }: FailLogData) {\n if (this.isDisabled()) {\n return;\n }\n\n // по общему соглашению фильтруем сетевые ошибки\n if (isNetworkError(error)) {\n return;\n }\n\n // по общему соглашению фильтруем ошибки обрывания\n if (isAbortError(error)) {\n return;\n }\n\n this.logger.error(\n new DetailedError(String(error), {\n level: 'error',\n context: [\n {\n key: 'Outgoing request details',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n headers: request.headers,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n // @todo data\n },\n },\n ],\n }),\n );\n }\n}\n"],"mappings":"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"}
@@ -18,7 +18,9 @@ function provideKnownHttpApiHosts(resolve) {
18
18
  simaV3: 'API_URL_SIMALAND_V3',
19
19
  simaV4: 'API_URL_SIMALAND_V4',
20
20
  simaV6: 'API_URL_SIMALAND_V6',
21
- chponkiV2: 'API_URL_CHPONKI_V2'
21
+ chponkiV2: 'API_URL_CHPONKI_V2',
22
+ shuttle: 'API_URL_SHUTTLE',
23
+ fileDispatcher: 'API_URL_FILE_DISPATCHER'
22
24
  }, source);
23
25
  }
24
26
  //# sourceMappingURL=known-http-api-hosts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"known-http-api-hosts.js","names":["_tokens","require","_httpApiHostPool","provideKnownHttpApiHosts","resolve","source","KnownToken","Config","HttpApiHostPool","ilium","simaV3","simaV4","simaV6","chponkiV2"],"sources":["../../../../../src/preset/server/providers/known-http-api-hosts.ts"],"sourcesContent":["import type { Resolve } from '../../../di';\nimport type { KnownHttpApiKey } from '../../isomorphic';\nimport { KnownToken } from '../../../tokens';\nimport { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool(\n {\n ilium: 'API_URL_ILIUM',\n simaV3: 'API_URL_SIMALAND_V3',\n simaV4: 'API_URL_SIMALAND_V4',\n simaV6: 'API_URL_SIMALAND_V6',\n chponkiV2: 'API_URL_CHPONKI_V2',\n },\n source,\n );\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,SAASE,wBAAwBA,CAACC,OAAgB,EAAoC;EAC3F,MAAMC,MAAM,GAAGD,OAAO,CAACE,kBAAU,CAACC,MAAM,CAACF,MAAM,CAAC;EAEhD,OAAO,IAAIG,gCAAe,CACxB;IACEC,KAAK,EAAE,eAAe;IACtBC,MAAM,EAAE,qBAAqB;IAC7BC,MAAM,EAAE,qBAAqB;IAC7BC,MAAM,EAAE,qBAAqB;IAC7BC,SAAS,EAAE;EACb,CAAC,EACDR,MACF,CAAC;AACH"}
1
+ {"version":3,"file":"known-http-api-hosts.js","names":["_tokens","require","_httpApiHostPool","provideKnownHttpApiHosts","resolve","source","KnownToken","Config","HttpApiHostPool","ilium","simaV3","simaV4","simaV6","chponkiV2","shuttle","fileDispatcher"],"sources":["../../../../../src/preset/server/providers/known-http-api-hosts.ts"],"sourcesContent":["import type { Resolve } from '../../../di';\nimport type { KnownHttpApiKey } from '../../isomorphic';\nimport { KnownToken } from '../../../tokens';\nimport { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool(\n {\n ilium: 'API_URL_ILIUM',\n simaV3: 'API_URL_SIMALAND_V3',\n simaV4: 'API_URL_SIMALAND_V4',\n simaV6: 'API_URL_SIMALAND_V6',\n chponkiV2: 'API_URL_CHPONKI_V2',\n shuttle: 'API_URL_SHUTTLE',\n fileDispatcher: 'API_URL_FILE_DISPATCHER',\n },\n source,\n );\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,SAASE,wBAAwBA,CAACC,OAAgB,EAAoC;EAC3F,MAAMC,MAAM,GAAGD,OAAO,CAACE,kBAAU,CAACC,MAAM,CAACF,MAAM,CAAC;EAEhD,OAAO,IAAIG,gCAAe,CACxB;IACEC,KAAK,EAAE,eAAe;IACtBC,MAAM,EAAE,qBAAqB;IAC7BC,MAAM,EAAE,qBAAqB;IAC7BC,MAAM,EAAE,qBAAqB;IAC7BC,SAAS,EAAE,oBAAoB;IAC/BC,OAAO,EAAE,iBAAiB;IAC1BC,cAAc,EAAE;EAClB,CAAC,EACDV,MACF,CAAC;AACH"}
@@ -18,7 +18,9 @@ function provideKnownHttpApiHosts(resolve) {
18
18
  simaV3: 'PUBLIC_API_URL_SIMALAND_V3',
19
19
  simaV4: 'PUBLIC_API_URL_SIMALAND_V4',
20
20
  simaV6: 'PUBLIC_API_URL_SIMALAND_V6',
21
- chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2'
21
+ chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2',
22
+ shuttle: 'PUBLIC_API_URL_SHUTTLE',
23
+ fileDispatcher: 'PUBLIC_API_URL_FILE_DISPATCHER'
22
24
  }, source);
23
25
  }
24
26
  //# sourceMappingURL=known-http-api-hosts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"known-http-api-hosts.js","names":["_tokens","require","_httpApiHostPool","provideKnownHttpApiHosts","resolve","source","KnownToken","Config","HttpApiHostPool","ilium","simaV3","simaV4","simaV6","chponkiV2"],"sources":["../../../../../src/preset/web/providers/known-http-api-hosts.ts"],"sourcesContent":["import { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport { KnownHttpApiKey } from '../../isomorphic/types';\nimport { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool<KnownHttpApiKey>(\n {\n ilium: 'PUBLIC_API_URL_ILIUM',\n simaV3: 'PUBLIC_API_URL_SIMALAND_V3',\n simaV4: 'PUBLIC_API_URL_SIMALAND_V4',\n simaV6: 'PUBLIC_API_URL_SIMALAND_V6',\n chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2',\n },\n source,\n );\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,SAASE,wBAAwBA,CAACC,OAAgB,EAAoC;EAC3F,MAAMC,MAAM,GAAGD,OAAO,CAACE,kBAAU,CAACC,MAAM,CAACF,MAAM,CAAC;EAEhD,OAAO,IAAIG,gCAAe,CACxB;IACEC,KAAK,EAAE,sBAAsB;IAC7BC,MAAM,EAAE,4BAA4B;IACpCC,MAAM,EAAE,4BAA4B;IACpCC,MAAM,EAAE,4BAA4B;IACpCC,SAAS,EAAE;EACb,CAAC,EACDR,MACF,CAAC;AACH"}
1
+ {"version":3,"file":"known-http-api-hosts.js","names":["_tokens","require","_httpApiHostPool","provideKnownHttpApiHosts","resolve","source","KnownToken","Config","HttpApiHostPool","ilium","simaV3","simaV4","simaV6","chponkiV2","shuttle","fileDispatcher"],"sources":["../../../../../src/preset/web/providers/known-http-api-hosts.ts"],"sourcesContent":["import { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport { KnownHttpApiKey } from '../../isomorphic/types';\nimport { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool<KnownHttpApiKey>(\n {\n ilium: 'PUBLIC_API_URL_ILIUM',\n simaV3: 'PUBLIC_API_URL_SIMALAND_V3',\n simaV4: 'PUBLIC_API_URL_SIMALAND_V4',\n simaV6: 'PUBLIC_API_URL_SIMALAND_V6',\n chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2',\n shuttle: 'PUBLIC_API_URL_SHUTTLE',\n fileDispatcher: 'PUBLIC_API_URL_FILE_DISPATCHER',\n },\n source,\n );\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,SAASE,wBAAwBA,CAACC,OAAgB,EAAoC;EAC3F,MAAMC,MAAM,GAAGD,OAAO,CAACE,kBAAU,CAACC,MAAM,CAACF,MAAM,CAAC;EAEhD,OAAO,IAAIG,gCAAe,CACxB;IACEC,KAAK,EAAE,sBAAsB;IAC7BC,MAAM,EAAE,4BAA4B;IACpCC,MAAM,EAAE,4BAA4B;IACpCC,MAAM,EAAE,4BAA4B;IACpCC,SAAS,EAAE,2BAA2B;IACtCC,OAAO,EAAE,wBAAwB;IACjCC,cAAc,EAAE;EAClB,CAAC,EACDV,MACF,CAAC;AACH"}
@@ -88,4 +88,64 @@ export const FetchUtil = {
88
88
  })];
89
89
  }
90
90
  };
91
+
92
+ /**
93
+ * Проверяет, является ли переданное значение ошибкой.
94
+ * @param value Значение.
95
+ * @return Является ли значение ошибкой.
96
+ */
97
+ function isError(value) {
98
+ return Object.prototype.toString.call(value) === '[object Error]';
99
+ }
100
+
101
+ // Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error
102
+ const networkErrorMessages = new Set(['network error',
103
+ // Chrome
104
+ 'Failed to fetch',
105
+ // Chrome
106
+ 'NetworkError when attempting to fetch resource.',
107
+ // Firefox
108
+ 'The Internet connection appears to be offline.',
109
+ // Safari 16
110
+ 'Load failed',
111
+ // Safari 17+
112
+ 'Network request failed',
113
+ // `cross-fetch`
114
+ 'fetch failed',
115
+ // Undici (Node.js)
116
+ 'terminated',
117
+ // Undici (Node.js)
118
+
119
+ // дальше идут наши наработки (основано на данных из Sentry)
120
+ 'Network Error' // Safari 17.4
121
+ ]);
122
+
123
+ /**
124
+ * Проверяет, является ли переданное значение ошибкой сети.
125
+ * Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error.
126
+ * Нет возможности использовать пакет is-network-error по причине того что он - ESM only.
127
+ * @param value Проверяемое значение.
128
+ * @return Является ли значение TypeError о том что произошла ошибка сети.
129
+ */
130
+ export function isNetworkError(value) {
131
+ const isValid = isError(value) && value.name === 'TypeError' && typeof value.message === 'string';
132
+ if (!isValid) {
133
+ return false;
134
+ }
135
+
136
+ // ВАЖНО: в Safari 17+ ошибки имеют определенное сообщение и не имеют свойства stack
137
+ if (value.message === 'Load failed') {
138
+ return value.stack === undefined;
139
+ }
140
+ return networkErrorMessages.has(value.message);
141
+ }
142
+
143
+ /**
144
+ * Проверяет является ли переданное значение ошибкой обрывания с помощью AbortController.
145
+ * @param value Проверяемое значение.
146
+ * @return Является ли значение ошибкой обрывания.
147
+ */
148
+ export function isAbortError(value) {
149
+ return typeof value === 'object' && value !== null && value.name === 'AbortError';
150
+ }
91
151
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["FetchUtil","setParams","url","params","paramName","paramValue","Object","entries","searchParams","delete","undefined","set","String","withParams","resultUrl","URL","withoutParams","search","eitherResponse","parseBody","response","json","parse","ok","data","error","Error","status","statusText","headers"],"sources":["../../../src/http/utils.ts"],"sourcesContent":["import type { URLSearchParamsInit, ResponseDone, ResponseFail } from './types';\n\n/**\n * Утилиты для работы с URL, URLSearchParams, Headers, Request, Response.\n */\nexport const FetchUtil = {\n /**\n * Получив параметры применит их к переданному URL.\n * @param url URL.\n * @param params Параметры.\n */\n setParams(url: URL, params: URLSearchParamsInit): void {\n for (const [paramName, paramValue] of Object.entries(params)) {\n if (paramValue === null) {\n url.searchParams.delete(paramName);\n continue;\n }\n\n if (paramValue !== undefined) {\n url.searchParams.set(paramName, String(paramValue));\n continue;\n }\n }\n },\n\n // @todo resetPrams?\n\n /**\n * Получив URL и параметры вернет новый URL с примененными параметрами.\n * @param url URL.\n * @param params Параметры.\n * @return URL.\n */\n withParams(url: string | URL, params: URLSearchParamsInit): URL {\n const resultUrl = new URL(url);\n\n FetchUtil.setParams(resultUrl, params);\n\n return resultUrl;\n },\n\n /**\n * Получив URL вернет его копию но без параметров.\n * @param url URL.\n * @return URL.\n */\n withoutParams(url: string | URL): URL {\n const resultUrl = new URL(url);\n\n resultUrl.search = '';\n\n return resultUrl;\n },\n\n /**\n * Возвращает кортеж обработчиков для Promise из fetch.\n * Полученный Promise никогда не уйдет в состояние rejected.\n * @param options Опции.\n * @return Кортеж.\n */\n eitherResponse<T = unknown>({\n parseBody = response => response.json(),\n }: {\n /** Парсер body. */\n parseBody?: (response: Response) => Promise<T>;\n } = {}) {\n /** @inheritdoc */\n const parse = async (response: Response): Promise<T | null> => {\n try {\n return await parseBody(response);\n } catch {\n return null;\n }\n };\n\n return [\n // then\n async (response: Response): Promise<ResponseDone<T> | ResponseFail<T>> => {\n if (!response.ok) {\n return {\n ok: false,\n data: (await parse(response)) as T,\n error: new Error(`Request failed with status code ${response.status}`),\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n };\n }\n\n return {\n ok: true,\n data: (await parse(response)) as T,\n error: null,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n };\n },\n\n // catch\n async (error: unknown): Promise<ResponseFail<T>> => ({\n ok: false,\n error,\n }),\n ] as const;\n },\n} as const;\n"],"mappings":"AAEA;AACA;AACA;AACA,OAAO,MAAMA,SAAS,GAAG;EACvB;AACF;AACA;AACA;AACA;EACEC,SAASA,CAACC,GAAQ,EAAEC,MAA2B,EAAQ;IACrD,KAAK,MAAM,CAACC,SAAS,EAAEC,UAAU,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,MAAM,CAAC,EAAE;MAC5D,IAAIE,UAAU,KAAK,IAAI,EAAE;QACvBH,GAAG,CAACM,YAAY,CAACC,MAAM,CAACL,SAAS,CAAC;QAClC;MACF;MAEA,IAAIC,UAAU,KAAKK,SAAS,EAAE;QAC5BR,GAAG,CAACM,YAAY,CAACG,GAAG,CAACP,SAAS,EAAEQ,MAAM,CAACP,UAAU,CAAC,CAAC;QACnD;MACF;IACF;EACF,CAAC;EAED;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEQ,UAAUA,CAACX,GAAiB,EAAEC,MAA2B,EAAO;IAC9D,MAAMW,SAAS,GAAG,IAAIC,GAAG,CAACb,GAAG,CAAC;IAE9BF,SAAS,CAACC,SAAS,CAACa,SAAS,EAAEX,MAAM,CAAC;IAEtC,OAAOW,SAAS;EAClB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,aAAaA,CAACd,GAAiB,EAAO;IACpC,MAAMY,SAAS,GAAG,IAAIC,GAAG,CAACb,GAAG,CAAC;IAE9BY,SAAS,CAACG,MAAM,GAAG,EAAE;IAErB,OAAOH,SAAS;EAClB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEI,cAAcA,CAAc;IAC1BC,SAAS,GAAGC,QAAQ,IAAIA,QAAQ,CAACC,IAAI,CAAC;EAIxC,CAAC,GAAG,CAAC,CAAC,EAAE;IACN;IACA,MAAMC,KAAK,GAAG,MAAOF,QAAkB,IAAwB;MAC7D,IAAI;QACF,OAAO,MAAMD,SAAS,CAACC,QAAQ,CAAC;MAClC,CAAC,CAAC,MAAM;QACN,OAAO,IAAI;MACb;IACF,CAAC;IAED,OAAO;IACL;IACA,MAAOA,QAAkB,IAAiD;MACxE,IAAI,CAACA,QAAQ,CAACG,EAAE,EAAE;QAChB,OAAO;UACLA,EAAE,EAAE,KAAK;UACTC,IAAI,EAAG,MAAMF,KAAK,CAACF,QAAQ,CAAO;UAClCK,KAAK,EAAE,IAAIC,KAAK,CAAE,mCAAkCN,QAAQ,CAACO,MAAO,EAAC,CAAC;UACtEA,MAAM,EAAEP,QAAQ,CAACO,MAAM;UACvBC,UAAU,EAAER,QAAQ,CAACQ,UAAU;UAC/BC,OAAO,EAAET,QAAQ,CAACS;QACpB,CAAC;MACH;MAEA,OAAO;QACLN,EAAE,EAAE,IAAI;QACRC,IAAI,EAAG,MAAMF,KAAK,CAACF,QAAQ,CAAO;QAClCK,KAAK,EAAE,IAAI;QACXE,MAAM,EAAEP,QAAQ,CAACO,MAAM;QACvBC,UAAU,EAAER,QAAQ,CAACQ,UAAU;QAC/BC,OAAO,EAAET,QAAQ,CAACS;MACpB,CAAC;IACH,CAAC;IAED;IACA,MAAOJ,KAAc,KAAgC;MACnDF,EAAE,EAAE,KAAK;MACTE;IACF,CAAC,CAAC,CACH;EACH;AACF,CAAU"}
1
+ {"version":3,"file":"utils.js","names":["FetchUtil","setParams","url","params","paramName","paramValue","Object","entries","searchParams","delete","undefined","set","String","withParams","resultUrl","URL","withoutParams","search","eitherResponse","parseBody","response","json","parse","ok","data","error","Error","status","statusText","headers","isError","value","prototype","toString","call","networkErrorMessages","Set","isNetworkError","isValid","name","message","stack","has","isAbortError"],"sources":["../../../src/http/utils.ts"],"sourcesContent":["import type { URLSearchParamsInit, ResponseDone, ResponseFail } from './types';\n\n/**\n * Утилиты для работы с URL, URLSearchParams, Headers, Request, Response.\n */\nexport const FetchUtil = {\n /**\n * Получив параметры применит их к переданному URL.\n * @param url URL.\n * @param params Параметры.\n */\n setParams(url: URL, params: URLSearchParamsInit): void {\n for (const [paramName, paramValue] of Object.entries(params)) {\n if (paramValue === null) {\n url.searchParams.delete(paramName);\n continue;\n }\n\n if (paramValue !== undefined) {\n url.searchParams.set(paramName, String(paramValue));\n continue;\n }\n }\n },\n\n // @todo resetPrams?\n\n /**\n * Получив URL и параметры вернет новый URL с примененными параметрами.\n * @param url URL.\n * @param params Параметры.\n * @return URL.\n */\n withParams(url: string | URL, params: URLSearchParamsInit): URL {\n const resultUrl = new URL(url);\n\n FetchUtil.setParams(resultUrl, params);\n\n return resultUrl;\n },\n\n /**\n * Получив URL вернет его копию но без параметров.\n * @param url URL.\n * @return URL.\n */\n withoutParams(url: string | URL): URL {\n const resultUrl = new URL(url);\n\n resultUrl.search = '';\n\n return resultUrl;\n },\n\n /**\n * Возвращает кортеж обработчиков для Promise из fetch.\n * Полученный Promise никогда не уйдет в состояние rejected.\n * @param options Опции.\n * @return Кортеж.\n */\n eitherResponse<T = unknown>({\n parseBody = response => response.json(),\n }: {\n /** Парсер body. */\n parseBody?: (response: Response) => Promise<T>;\n } = {}) {\n /** @inheritdoc */\n const parse = async (response: Response): Promise<T | null> => {\n try {\n return await parseBody(response);\n } catch {\n return null;\n }\n };\n\n return [\n // then\n async (response: Response): Promise<ResponseDone<T> | ResponseFail<T>> => {\n if (!response.ok) {\n return {\n ok: false,\n data: (await parse(response)) as T,\n error: new Error(`Request failed with status code ${response.status}`),\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n };\n }\n\n return {\n ok: true,\n data: (await parse(response)) as T,\n error: null,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n };\n },\n\n // catch\n async (error: unknown): Promise<ResponseFail<T>> => ({\n ok: false,\n error,\n }),\n ] as const;\n },\n} as const;\n\n/**\n * Проверяет, является ли переданное значение ошибкой.\n * @param value Значение.\n * @return Является ли значение ошибкой.\n */\nfunction isError(value: unknown): value is Error {\n return Object.prototype.toString.call(value) === '[object Error]';\n}\n\n// Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error\nconst networkErrorMessages = new Set([\n 'network error', // Chrome\n 'Failed to fetch', // Chrome\n 'NetworkError when attempting to fetch resource.', // Firefox\n 'The Internet connection appears to be offline.', // Safari 16\n 'Load failed', // Safari 17+\n 'Network request failed', // `cross-fetch`\n 'fetch failed', // Undici (Node.js)\n 'terminated', // Undici (Node.js)\n\n // дальше идут наши наработки (основано на данных из Sentry)\n 'Network Error', // Safari 17.4\n]);\n\n/**\n * Проверяет, является ли переданное значение ошибкой сети.\n * Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error.\n * Нет возможности использовать пакет is-network-error по причине того что он - ESM only.\n * @param value Проверяемое значение.\n * @return Является ли значение TypeError о том что произошла ошибка сети.\n */\nexport function isNetworkError(value: unknown): value is TypeError {\n const isValid = isError(value) && value.name === 'TypeError' && typeof value.message === 'string';\n\n if (!isValid) {\n return false;\n }\n\n // ВАЖНО: в Safari 17+ ошибки имеют определенное сообщение и не имеют свойства stack\n if (value.message === 'Load failed') {\n return value.stack === undefined;\n }\n\n return networkErrorMessages.has(value.message);\n}\n\n/**\n * Проверяет является ли переданное значение ошибкой обрывания с помощью AbortController.\n * @param value Проверяемое значение.\n * @return Является ли значение ошибкой обрывания.\n */\nexport function isAbortError(value: unknown): value is { name: 'AbortError' } {\n return typeof value === 'object' && value !== null && (value as any).name === 'AbortError';\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@sima-land/isomorph",
4
- "version": "11.0.0-alpha.52",
4
+ "version": "11.0.0-alpha.53",
5
5
  "dependencies": {
6
6
  "@humanwhocodes/env": "^3.0.5",
7
7
  "@krutoo/fetch-tools": "^0.0.16",
@@ -14,9 +14,9 @@
14
14
  "@opentelemetry/sdk-trace-base": "^1.25.1",
15
15
  "@opentelemetry/sdk-trace-node": "^1.25.1",
16
16
  "@opentelemetry/semantic-conventions": "^1.25.1",
17
- "@sentry/browser": "^8.13.0",
18
- "@sentry/bun": "^8.13.0",
19
- "@sentry/node": "^8.13.0",
17
+ "@sentry/browser": "^8.33.1",
18
+ "@sentry/bun": "^8.33.1",
19
+ "@sentry/node": "^8.33.1",
20
20
  "accepts": "^1.3.8",
21
21
  "dotenv": "^16.3.1",
22
22
  "express": "^4.21.0",
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/isomorphic/types.ts"],"sourcesContent":["import type { Provider, Token } from '../../di';\n\nexport interface PresetTuner {\n (tools: { override: <T>(token: Token<T>, provider: Provider<T>) => void }): void;\n}\n\nexport type KnownHttpApiKey = 'ilium' | 'simaV3' | 'simaV4' | 'simaV6' | 'chponkiV2';\n\n/**\n * Строгая версия Map без возможности добавлять/удалять.\n */\nexport interface StrictMap<Key extends string> {\n /** Возвращает значение по ключу. */\n get(key: Key): string;\n}\n\n/**\n * Внутренний интерфейс для хранения ссылок на ассеты.\n */\nexport interface PageAssets {\n js: string;\n css: string;\n criticalJs?: string;\n criticalCss?: string;\n}\n\n/**\n * Структура ответа от frontend-микросервиса в формате JSON по соглашению.\n */\nexport interface ConventionalJson {\n markup: string;\n bundle_js: string;\n bundle_css: string;\n critical_js?: string;\n critical_css?: string;\n meta?: any;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/isomorphic/types.ts"],"sourcesContent":["import type { Provider, Token } from '../../di';\n\nexport interface PresetTuner {\n (tools: { override: <T>(token: Token<T>, provider: Provider<T>) => void }): void;\n}\n\nexport type KnownHttpApiKey =\n | 'ilium'\n | 'simaV3'\n | 'simaV4'\n | 'simaV6'\n | 'chponkiV2'\n | 'shuttle'\n | 'fileDispatcher';\n\n/**\n * Строгая версия Map без возможности добавлять/удалять.\n */\nexport interface StrictMap<Key extends string> {\n /** Возвращает значение по ключу. */\n get(key: Key): string;\n}\n\n/**\n * Внутренний интерфейс для хранения ссылок на ассеты.\n */\nexport interface PageAssets {\n js: string;\n css: string;\n criticalJs?: string;\n criticalCss?: string;\n}\n\n/**\n * Структура ответа от frontend-микросервиса в формате JSON по соглашению.\n */\nexport interface ConventionalJson {\n markup: string;\n bundle_js: string;\n bundle_css: string;\n critical_js?: string;\n critical_css?: string;\n meta?: any;\n}\n"],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import { isAbortError, isNetworkError } from "../../../http/utils.js";
1
2
  import { Breadcrumb, DetailedError } from "./../../../log/index.js";
2
3
  import { applyAxiosDefaults } from "./../../../utils/axios/index.js";
3
4
  import { Disableable } from "./disableable.js";
@@ -87,54 +88,71 @@ export class AxiosLogging extends Disableable {
87
88
  if (this.isDisabled()) {
88
89
  return;
89
90
  }
90
- if (axios.isAxiosError(error)) {
91
- const {
92
- requestInfo
93
- } = this;
94
- const statusCode = error.response?.status || 'UNKNOWN';
95
91
 
96
- // @todo выяснить: нужно ли нам отправлять ответы с кодом <500 в Sentry на уровне всех команд
97
- // если да то можно добавить метод в духе errorStatusFilter(s => s !== 422)
98
- this.logger.error(new DetailedError(`HTTP request failed, status code: ${statusCode}, error message: ${error.message}`, {
99
- level: severityFromStatus(error.response?.status),
100
- context: [{
101
- key: 'Request details',
102
- data: {
103
- url: requestInfo.url,
104
- baseURL: requestInfo.baseURL,
105
- method: requestInfo.method,
106
- headers: requestInfo.headers,
107
- data: requestInfo.data,
108
- params: requestInfo.params
109
- }
110
- }, {
111
- key: 'Response details',
112
- data: {
113
- data: error.response?.data,
114
- // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)
115
- headers: {
116
- ...error.response?.headers
117
- },
118
- error: error.toJSON()
119
- }
120
- }]
121
- }));
122
- if (typeof statusCode === 'number') {
123
- this.logger.info(new Breadcrumb({
124
- category: 'http.response',
125
- type: 'http',
126
- data: {
127
- url: requestInfo.readyURL,
128
- method: requestInfo.method,
129
- status_code: statusCode,
130
- params: requestInfo.params
131
- },
132
- level: 'error'
133
- }));
134
- }
135
- } else {
92
+ // если это не AxiosError тогда выполняем простое логирование
93
+ if (!axios.isAxiosError(error)) {
136
94
  this.logger.error(error);
95
+ return;
96
+ }
97
+ const statusCode = error.response?.status ?? 'UNKNOWN';
98
+ const {
99
+ requestInfo
100
+ } = this;
101
+ if (typeof statusCode === 'number') {
102
+ this.logger.info(new Breadcrumb({
103
+ category: 'http.response',
104
+ type: 'http',
105
+ data: {
106
+ url: requestInfo.readyURL,
107
+ method: requestInfo.method,
108
+ status_code: statusCode,
109
+ params: requestInfo.params
110
+ },
111
+ level: 'error'
112
+ }));
137
113
  }
114
+
115
+ // по общему соглашению фильтруем сетевые ошибки
116
+ if (isNetworkError(error.cause)) {
117
+ return;
118
+ }
119
+
120
+ // по общему соглашению фильтруем ошибки обрывания
121
+ if (isAbortError(error.cause)) {
122
+ return;
123
+ }
124
+
125
+ // по общему соглашению фильтруем все статусы < 500
126
+ if (typeof statusCode === 'number' && statusCode < 500) {
127
+ return;
128
+ }
129
+
130
+ // @todo добавить метод в духе errorStatusFilter(s => s !== 422)
131
+
132
+ this.logger.error(new DetailedError(`HTTP request failed, status code: ${statusCode}, error message: ${error.message}`, {
133
+ level: severityFromStatus(error.response?.status),
134
+ context: [{
135
+ key: 'Request details',
136
+ data: {
137
+ url: requestInfo.url,
138
+ baseURL: requestInfo.baseURL,
139
+ method: requestInfo.method,
140
+ headers: requestInfo.headers,
141
+ data: requestInfo.data,
142
+ params: requestInfo.params
143
+ }
144
+ }, {
145
+ key: 'Response details',
146
+ data: {
147
+ data: error.response?.data,
148
+ // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)
149
+ headers: {
150
+ ...error.response?.headers
151
+ },
152
+ error: error.toJSON()
153
+ }
154
+ }]
155
+ }));
138
156
  }
139
157
  }
140
158
  //# sourceMappingURL=axios-logging.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"axios-logging.js","names":["Breadcrumb","DetailedError","applyAxiosDefaults","Disableable","displayUrl","severityFromStatus","axios","AxiosLogging","constructor","logger","data","config","defaults","requestInfo","readyURL","baseURL","url","beforeRequest","isDisabled","method","params","info","category","type","level","afterResponse","response","status_code","status","onCatch","error","isAxiosError","statusCode","message","context","key","headers","toJSON"],"sources":["../../../../../src/preset/isomorphic/utils/axios-logging.ts"],"sourcesContent":["import { Breadcrumb, DetailedError, type Logger } from '../../../log';\nimport {\n type LogMiddlewareHandler,\n applyAxiosDefaults,\n SharedData,\n DoneSharedData,\n FailSharedData,\n} from '../../../utils/axios';\nimport { Disableable } from './disableable';\nimport { displayUrl } from './display-url';\nimport { severityFromStatus } from './severity-from-status';\nimport axios from 'axios';\n\n/**\n * Обработчик для промежуточного слоя логирования исходящих http-запросов.\n * Отправляет хлебные крошки и данные ошибки, пригодные для Sentry.\n */\nexport class AxiosLogging extends Disableable implements LogMiddlewareHandler {\n logger: Logger;\n\n protected readonly requestInfo: ReturnType<typeof applyAxiosDefaults> & {\n readyURL: string;\n };\n\n /**\n * Конструктор.\n * @param logger Logger.\n * @param data Данные запроса.\n */\n constructor(logger: Logger, data: SharedData) {\n super();\n const config = applyAxiosDefaults(data.config, data.defaults);\n\n this.logger = logger;\n\n this.requestInfo = {\n ...config,\n readyURL: displayUrl(config.baseURL, config.url),\n };\n }\n\n /**\n * Отправит хлебные крошки перед запросом.\n */\n beforeRequest() {\n if (this.isDisabled()) {\n return;\n }\n\n const { readyURL, method, params } = this.requestInfo;\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.request',\n type: 'http',\n data: {\n url: readyURL,\n method,\n params,\n },\n level: 'info',\n }),\n );\n }\n\n /**\n * Отправит хлебные крошки после запроса.\n * @param data Данные ответа.\n */\n afterResponse({ response }: DoneSharedData) {\n if (this.isDisabled()) {\n return;\n }\n\n const { readyURL, method, params } = this.requestInfo;\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: readyURL,\n method,\n status_code: response.status,\n params,\n },\n level: 'info',\n }),\n );\n }\n\n /**\n * Отправит данные ошибки при перехвате.\n * @param data Данные запроса.\n */\n onCatch({ error }: FailSharedData) {\n if (this.isDisabled()) {\n return;\n }\n\n if (axios.isAxiosError(error)) {\n const { requestInfo } = this;\n const statusCode = error.response?.status || 'UNKNOWN';\n\n // @todo выяснить: нужно ли нам отправлять ответы с кодом <500 в Sentry на уровне всех команд\n // если да то можно добавить метод в духе errorStatusFilter(s => s !== 422)\n this.logger.error(\n new DetailedError(\n `HTTP request failed, status code: ${statusCode}, error message: ${error.message}`,\n {\n level: severityFromStatus(error.response?.status),\n context: [\n {\n key: 'Request details',\n data: {\n url: requestInfo.url,\n baseURL: requestInfo.baseURL,\n method: requestInfo.method,\n headers: requestInfo.headers,\n data: requestInfo.data,\n params: requestInfo.params,\n },\n },\n {\n key: 'Response details',\n data: {\n data: error.response?.data,\n\n // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)\n headers: { ...error.response?.headers },\n\n error: error.toJSON(),\n },\n },\n ],\n },\n ),\n );\n\n if (typeof statusCode === 'number') {\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: requestInfo.readyURL,\n method: requestInfo.method,\n status_code: statusCode,\n params: requestInfo.params,\n },\n level: 'error',\n }),\n );\n }\n } else {\n this.logger.error(error);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"axios-logging.js","names":["isAbortError","isNetworkError","Breadcrumb","DetailedError","applyAxiosDefaults","Disableable","displayUrl","severityFromStatus","axios","AxiosLogging","constructor","logger","data","config","defaults","requestInfo","readyURL","baseURL","url","beforeRequest","isDisabled","method","params","info","category","type","level","afterResponse","response","status_code","status","onCatch","error","isAxiosError","statusCode","cause","message","context","key","headers","toJSON"],"sources":["../../../../../src/preset/isomorphic/utils/axios-logging.ts"],"sourcesContent":["import { isAbortError, isNetworkError } from '../../../http/utils';\nimport { Breadcrumb, DetailedError, type Logger } from '../../../log';\nimport {\n type LogMiddlewareHandler,\n applyAxiosDefaults,\n SharedData,\n DoneSharedData,\n FailSharedData,\n} from '../../../utils/axios';\nimport { Disableable } from './disableable';\nimport { displayUrl } from './display-url';\nimport { severityFromStatus } from './severity-from-status';\nimport axios from 'axios';\n\n/**\n * Обработчик для промежуточного слоя логирования исходящих http-запросов.\n * Отправляет хлебные крошки и данные ошибки, пригодные для Sentry.\n */\nexport class AxiosLogging extends Disableable implements LogMiddlewareHandler {\n logger: Logger;\n\n protected readonly requestInfo: ReturnType<typeof applyAxiosDefaults> & {\n readyURL: string;\n };\n\n /**\n * Конструктор.\n * @param logger Logger.\n * @param data Данные запроса.\n */\n constructor(logger: Logger, data: SharedData) {\n super();\n const config = applyAxiosDefaults(data.config, data.defaults);\n\n this.logger = logger;\n\n this.requestInfo = {\n ...config,\n readyURL: displayUrl(config.baseURL, config.url),\n };\n }\n\n /**\n * Отправит хлебные крошки перед запросом.\n */\n beforeRequest() {\n if (this.isDisabled()) {\n return;\n }\n\n const { readyURL, method, params } = this.requestInfo;\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.request',\n type: 'http',\n data: {\n url: readyURL,\n method,\n params,\n },\n level: 'info',\n }),\n );\n }\n\n /**\n * Отправит хлебные крошки после запроса.\n * @param data Данные ответа.\n */\n afterResponse({ response }: DoneSharedData) {\n if (this.isDisabled()) {\n return;\n }\n\n const { readyURL, method, params } = this.requestInfo;\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: readyURL,\n method,\n status_code: response.status,\n params,\n },\n level: 'info',\n }),\n );\n }\n\n /**\n * Отправит данные ошибки при перехвате.\n * @param data Данные запроса.\n */\n onCatch({ error }: FailSharedData) {\n if (this.isDisabled()) {\n return;\n }\n\n // если это не AxiosError тогда выполняем простое логирование\n if (!axios.isAxiosError(error)) {\n this.logger.error(error);\n return;\n }\n\n const statusCode = error.response?.status ?? 'UNKNOWN';\n const { requestInfo } = this;\n\n if (typeof statusCode === 'number') {\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: requestInfo.readyURL,\n method: requestInfo.method,\n status_code: statusCode,\n params: requestInfo.params,\n },\n level: 'error',\n }),\n );\n }\n\n // по общему соглашению фильтруем сетевые ошибки\n if (isNetworkError(error.cause)) {\n return;\n }\n\n // по общему соглашению фильтруем ошибки обрывания\n if (isAbortError(error.cause)) {\n return;\n }\n\n // по общему соглашению фильтруем все статусы < 500\n if (typeof statusCode === 'number' && statusCode < 500) {\n return;\n }\n\n // @todo добавить метод в духе errorStatusFilter(s => s !== 422)\n\n this.logger.error(\n new DetailedError(\n `HTTP request failed, status code: ${statusCode}, error message: ${error.message}`,\n {\n level: severityFromStatus(error.response?.status),\n context: [\n {\n key: 'Request details',\n data: {\n url: requestInfo.url,\n baseURL: requestInfo.baseURL,\n method: requestInfo.method,\n headers: requestInfo.headers,\n data: requestInfo.data,\n params: requestInfo.params,\n },\n },\n {\n key: 'Response details',\n data: {\n data: error.response?.data,\n\n // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)\n headers: { ...error.response?.headers },\n\n error: error.toJSON(),\n },\n },\n ],\n },\n ),\n );\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { FetchUtil } from "./../../../http/index.js";
2
+ import { isAbortError, isNetworkError } from "../../../http/utils.js";
2
3
  import { Breadcrumb, DetailedError } from "./../../../log/index.js";
3
4
  import { Disableable } from "./disableable.js";
4
5
 
@@ -50,6 +51,24 @@ export class FetchLogging extends Disableable {
50
51
  },
51
52
  level: response.ok ? 'info' : 'error'
52
53
  }));
54
+
55
+ // по общему соглашению фильтруем все статусы < 500
56
+ if (response.status < 500) {
57
+ return;
58
+ }
59
+ this.logger.error(new DetailedError(`HTTP request failed, status code: ${response.status}`, {
60
+ level: 'error',
61
+ context: [{
62
+ key: 'Outgoing request details',
63
+ data: {
64
+ url: FetchUtil.withoutParams(request.url).href,
65
+ method: request.method,
66
+ headers: request.headers,
67
+ params: Object.fromEntries(new URL(request.url).searchParams.entries())
68
+ // @todo data
69
+ }
70
+ }]
71
+ }));
53
72
  }
54
73
 
55
74
  /** @inheritdoc */
@@ -60,6 +79,16 @@ export class FetchLogging extends Disableable {
60
79
  if (this.isDisabled()) {
61
80
  return;
62
81
  }
82
+
83
+ // по общему соглашению фильтруем сетевые ошибки
84
+ if (isNetworkError(error)) {
85
+ return;
86
+ }
87
+
88
+ // по общему соглашению фильтруем ошибки обрывания
89
+ if (isAbortError(error)) {
90
+ return;
91
+ }
63
92
  this.logger.error(new DetailedError(String(error), {
64
93
  level: 'error',
65
94
  context: [{
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-logging.js","names":["FetchUtil","Breadcrumb","DetailedError","Disableable","FetchLogging","constructor","logger","onRequest","request","isDisabled","info","category","type","data","url","withoutParams","href","method","params","Object","fromEntries","URL","searchParams","entries","level","onResponse","response","status_code","status","ok","onCatch","error","String","context","key","headers"],"sources":["../../../../../src/preset/isomorphic/utils/fetch-logging.ts"],"sourcesContent":["import { LogHandler, LogData, DoneLogData, FetchUtil, FailLogData } from '../../../http';\nimport { Breadcrumb, DetailedError, Logger } from '../../../log';\nimport { Disableable } from './disableable';\n\n/**\n * Обработчик логирования внешних http-запросов.\n */\nexport class FetchLogging extends Disableable implements LogHandler {\n logger: Logger;\n\n /** @inheritdoc */\n constructor(logger: Logger) {\n super();\n this.logger = logger;\n }\n\n /** @inheritdoc */\n onRequest({ request }: LogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.request',\n type: 'http',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n },\n level: 'info',\n }),\n );\n }\n\n /** @inheritdoc */\n onResponse({ response, request }: DoneLogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n status_code: response.status,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n },\n level: response.ok ? 'info' : 'error',\n }),\n );\n }\n\n /** @inheritdoc */\n onCatch({ error, request }: FailLogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.error(\n new DetailedError(String(error), {\n level: 'error',\n context: [\n {\n key: 'Outgoing request details',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n headers: request.headers,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n // @todo data\n },\n },\n ],\n }),\n );\n }\n}\n"],"mappings":"AAAA,SAA2CA,SAAS,QAAqB,0BAAe;AACxF,SAASC,UAAU,EAAEC,aAAa,QAAgB,yBAAc;AAChE,SAASC,WAAW,QAAQ,kBAAe;;AAE3C;AACA;AACA;AACA,OAAO,MAAMC,YAAY,SAASD,WAAW,CAAuB;EAGlE;EACAE,WAAWA,CAACC,MAAc,EAAE;IAC1B,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;;EAEA;EACAC,SAASA,CAAC;IAAEC;EAAiB,CAAC,EAAE;IAC9B,IAAI,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE;MACrB;IACF;IAEA,IAAI,CAACH,MAAM,CAACI,IAAI,CACd,IAAIT,UAAU,CAAC;MACbU,QAAQ,EAAE,cAAc;MACxBC,IAAI,EAAE,MAAM;MACZC,IAAI,EAAE;QACJC,GAAG,EAAEd,SAAS,CAACe,aAAa,CAACP,OAAO,CAACM,GAAG,CAAC,CAACE,IAAI;QAC9CC,MAAM,EAAET,OAAO,CAACS,MAAM;QACtBC,MAAM,EAAEC,MAAM,CAACC,WAAW,CAAC,IAAIC,GAAG,CAACb,OAAO,CAACM,GAAG,CAAC,CAACQ,YAAY,CAACC,OAAO,CAAC,CAAC;MACxE,CAAC;MACDC,KAAK,EAAE;IACT,CAAC,CACH,CAAC;EACH;;EAEA;EACAC,UAAUA,CAAC;IAAEC,QAAQ;IAAElB;EAAqB,CAAC,EAAE;IAC7C,IAAI,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE;MACrB;IACF;IAEA,IAAI,CAACH,MAAM,CAACI,IAAI,CACd,IAAIT,UAAU,CAAC;MACbU,QAAQ,EAAE,eAAe;MACzBC,IAAI,EAAE,MAAM;MACZC,IAAI,EAAE;QACJC,GAAG,EAAEd,SAAS,CAACe,aAAa,CAACP,OAAO,CAACM,GAAG,CAAC,CAACE,IAAI;QAC9CC,MAAM,EAAET,OAAO,CAACS,MAAM;QACtBU,WAAW,EAAED,QAAQ,CAACE,MAAM;QAC5BV,MAAM,EAAEC,MAAM,CAACC,WAAW,CAAC,IAAIC,GAAG,CAACb,OAAO,CAACM,GAAG,CAAC,CAACQ,YAAY,CAACC,OAAO,CAAC,CAAC;MACxE,CAAC;MACDC,KAAK,EAAEE,QAAQ,CAACG,EAAE,GAAG,MAAM,GAAG;IAChC,CAAC,CACH,CAAC;EACH;;EAEA;EACAC,OAAOA,CAAC;IAAEC,KAAK;IAAEvB;EAAqB,CAAC,EAAE;IACvC,IAAI,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE;MACrB;IACF;IAEA,IAAI,CAACH,MAAM,CAACyB,KAAK,CACf,IAAI7B,aAAa,CAAC8B,MAAM,CAACD,KAAK,CAAC,EAAE;MAC/BP,KAAK,EAAE,OAAO;MACdS,OAAO,EAAE,CACP;QACEC,GAAG,EAAE,0BAA0B;QAC/BrB,IAAI,EAAE;UACJC,GAAG,EAAEd,SAAS,CAACe,aAAa,CAACP,OAAO,CAACM,GAAG,CAAC,CAACE,IAAI;UAC9CC,MAAM,EAAET,OAAO,CAACS,MAAM;UACtBkB,OAAO,EAAE3B,OAAO,CAAC2B,OAAO;UACxBjB,MAAM,EAAEC,MAAM,CAACC,WAAW,CAAC,IAAIC,GAAG,CAACb,OAAO,CAACM,GAAG,CAAC,CAACQ,YAAY,CAACC,OAAO,CAAC,CAAC;UACtE;QACF;MACF,CAAC;IAEL,CAAC,CACH,CAAC;EACH;AACF"}
1
+ {"version":3,"file":"fetch-logging.js","names":["FetchUtil","isAbortError","isNetworkError","Breadcrumb","DetailedError","Disableable","FetchLogging","constructor","logger","onRequest","request","isDisabled","info","category","type","data","url","withoutParams","href","method","params","Object","fromEntries","URL","searchParams","entries","level","onResponse","response","status_code","status","ok","error","context","key","headers","onCatch","String"],"sources":["../../../../../src/preset/isomorphic/utils/fetch-logging.ts"],"sourcesContent":["import { LogHandler, LogData, DoneLogData, FetchUtil, FailLogData } from '../../../http';\nimport { isAbortError, isNetworkError } from '../../../http/utils';\nimport { Breadcrumb, DetailedError, Logger } from '../../../log';\nimport { Disableable } from './disableable';\n\n/**\n * Обработчик логирования внешних http-запросов.\n */\nexport class FetchLogging extends Disableable implements LogHandler {\n logger: Logger;\n\n /** @inheritdoc */\n constructor(logger: Logger) {\n super();\n this.logger = logger;\n }\n\n /** @inheritdoc */\n onRequest({ request }: LogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.request',\n type: 'http',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n },\n level: 'info',\n }),\n );\n }\n\n /** @inheritdoc */\n onResponse({ response, request }: DoneLogData) {\n if (this.isDisabled()) {\n return;\n }\n\n this.logger.info(\n new Breadcrumb({\n category: 'http.response',\n type: 'http',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n status_code: response.status,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n },\n level: response.ok ? 'info' : 'error',\n }),\n );\n\n // по общему соглашению фильтруем все статусы < 500\n if (response.status < 500) {\n return;\n }\n\n this.logger.error(\n new DetailedError(`HTTP request failed, status code: ${response.status}`, {\n level: 'error',\n context: [\n {\n key: 'Outgoing request details',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n headers: request.headers,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n // @todo data\n },\n },\n ],\n }),\n );\n }\n\n /** @inheritdoc */\n onCatch({ error, request }: FailLogData) {\n if (this.isDisabled()) {\n return;\n }\n\n // по общему соглашению фильтруем сетевые ошибки\n if (isNetworkError(error)) {\n return;\n }\n\n // по общему соглашению фильтруем ошибки обрывания\n if (isAbortError(error)) {\n return;\n }\n\n this.logger.error(\n new DetailedError(String(error), {\n level: 'error',\n context: [\n {\n key: 'Outgoing request details',\n data: {\n url: FetchUtil.withoutParams(request.url).href,\n method: request.method,\n headers: request.headers,\n params: Object.fromEntries(new URL(request.url).searchParams.entries()),\n // @todo data\n },\n },\n ],\n }),\n );\n }\n}\n"],"mappings":"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"}
@@ -13,7 +13,9 @@ export function provideKnownHttpApiHosts(resolve) {
13
13
  simaV3: 'API_URL_SIMALAND_V3',
14
14
  simaV4: 'API_URL_SIMALAND_V4',
15
15
  simaV6: 'API_URL_SIMALAND_V6',
16
- chponkiV2: 'API_URL_CHPONKI_V2'
16
+ chponkiV2: 'API_URL_CHPONKI_V2',
17
+ shuttle: 'API_URL_SHUTTLE',
18
+ fileDispatcher: 'API_URL_FILE_DISPATCHER'
17
19
  }, source);
18
20
  }
19
21
  //# sourceMappingURL=known-http-api-hosts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"known-http-api-hosts.js","names":["KnownToken","HttpApiHostPool","provideKnownHttpApiHosts","resolve","source","Config","ilium","simaV3","simaV4","simaV6","chponkiV2"],"sources":["../../../../../src/preset/server/providers/known-http-api-hosts.ts"],"sourcesContent":["import type { Resolve } from '../../../di';\nimport type { KnownHttpApiKey } from '../../isomorphic';\nimport { KnownToken } from '../../../tokens';\nimport { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool(\n {\n ilium: 'API_URL_ILIUM',\n simaV3: 'API_URL_SIMALAND_V3',\n simaV4: 'API_URL_SIMALAND_V4',\n simaV6: 'API_URL_SIMALAND_V6',\n chponkiV2: 'API_URL_CHPONKI_V2',\n },\n source,\n );\n}\n"],"mappings":"AAEA,SAASA,UAAU,QAAQ,oBAAiB;AAC5C,SAASC,eAAe,QAAQ,8CAA2C;;AAE3E;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAACC,OAAgB,EAAoC;EAC3F,MAAMC,MAAM,GAAGD,OAAO,CAACH,UAAU,CAACK,MAAM,CAACD,MAAM,CAAC;EAEhD,OAAO,IAAIH,eAAe,CACxB;IACEK,KAAK,EAAE,eAAe;IACtBC,MAAM,EAAE,qBAAqB;IAC7BC,MAAM,EAAE,qBAAqB;IAC7BC,MAAM,EAAE,qBAAqB;IAC7BC,SAAS,EAAE;EACb,CAAC,EACDN,MACF,CAAC;AACH"}
1
+ {"version":3,"file":"known-http-api-hosts.js","names":["KnownToken","HttpApiHostPool","provideKnownHttpApiHosts","resolve","source","Config","ilium","simaV3","simaV4","simaV6","chponkiV2","shuttle","fileDispatcher"],"sources":["../../../../../src/preset/server/providers/known-http-api-hosts.ts"],"sourcesContent":["import type { Resolve } from '../../../di';\nimport type { KnownHttpApiKey } from '../../isomorphic';\nimport { KnownToken } from '../../../tokens';\nimport { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool(\n {\n ilium: 'API_URL_ILIUM',\n simaV3: 'API_URL_SIMALAND_V3',\n simaV4: 'API_URL_SIMALAND_V4',\n simaV6: 'API_URL_SIMALAND_V6',\n chponkiV2: 'API_URL_CHPONKI_V2',\n shuttle: 'API_URL_SHUTTLE',\n fileDispatcher: 'API_URL_FILE_DISPATCHER',\n },\n source,\n );\n}\n"],"mappings":"AAEA,SAASA,UAAU,QAAQ,oBAAiB;AAC5C,SAASC,eAAe,QAAQ,8CAA2C;;AAE3E;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAACC,OAAgB,EAAoC;EAC3F,MAAMC,MAAM,GAAGD,OAAO,CAACH,UAAU,CAACK,MAAM,CAACD,MAAM,CAAC;EAEhD,OAAO,IAAIH,eAAe,CACxB;IACEK,KAAK,EAAE,eAAe;IACtBC,MAAM,EAAE,qBAAqB;IAC7BC,MAAM,EAAE,qBAAqB;IAC7BC,MAAM,EAAE,qBAAqB;IAC7BC,SAAS,EAAE,oBAAoB;IAC/BC,OAAO,EAAE,iBAAiB;IAC1BC,cAAc,EAAE;EAClB,CAAC,EACDR,MACF,CAAC;AACH"}
@@ -13,7 +13,9 @@ export function provideKnownHttpApiHosts(resolve) {
13
13
  simaV3: 'PUBLIC_API_URL_SIMALAND_V3',
14
14
  simaV4: 'PUBLIC_API_URL_SIMALAND_V4',
15
15
  simaV6: 'PUBLIC_API_URL_SIMALAND_V6',
16
- chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2'
16
+ chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2',
17
+ shuttle: 'PUBLIC_API_URL_SHUTTLE',
18
+ fileDispatcher: 'PUBLIC_API_URL_FILE_DISPATCHER'
17
19
  }, source);
18
20
  }
19
21
  //# sourceMappingURL=known-http-api-hosts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"known-http-api-hosts.js","names":["KnownToken","HttpApiHostPool","provideKnownHttpApiHosts","resolve","source","Config","ilium","simaV3","simaV4","simaV6","chponkiV2"],"sources":["../../../../../src/preset/web/providers/known-http-api-hosts.ts"],"sourcesContent":["import { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport { KnownHttpApiKey } from '../../isomorphic/types';\nimport { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool<KnownHttpApiKey>(\n {\n ilium: 'PUBLIC_API_URL_ILIUM',\n simaV3: 'PUBLIC_API_URL_SIMALAND_V3',\n simaV4: 'PUBLIC_API_URL_SIMALAND_V4',\n simaV6: 'PUBLIC_API_URL_SIMALAND_V6',\n chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2',\n },\n source,\n );\n}\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,oBAAiB;AAE5C,SAASC,eAAe,QAAQ,8CAA2C;;AAE3E;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAACC,OAAgB,EAAoC;EAC3F,MAAMC,MAAM,GAAGD,OAAO,CAACH,UAAU,CAACK,MAAM,CAACD,MAAM,CAAC;EAEhD,OAAO,IAAIH,eAAe,CACxB;IACEK,KAAK,EAAE,sBAAsB;IAC7BC,MAAM,EAAE,4BAA4B;IACpCC,MAAM,EAAE,4BAA4B;IACpCC,MAAM,EAAE,4BAA4B;IACpCC,SAAS,EAAE;EACb,CAAC,EACDN,MACF,CAAC;AACH"}
1
+ {"version":3,"file":"known-http-api-hosts.js","names":["KnownToken","HttpApiHostPool","provideKnownHttpApiHosts","resolve","source","Config","ilium","simaV3","simaV4","simaV6","chponkiV2","shuttle","fileDispatcher"],"sources":["../../../../../src/preset/web/providers/known-http-api-hosts.ts"],"sourcesContent":["import { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport { KnownHttpApiKey } from '../../isomorphic/types';\nimport { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool<KnownHttpApiKey>(\n {\n ilium: 'PUBLIC_API_URL_ILIUM',\n simaV3: 'PUBLIC_API_URL_SIMALAND_V3',\n simaV4: 'PUBLIC_API_URL_SIMALAND_V4',\n simaV6: 'PUBLIC_API_URL_SIMALAND_V6',\n chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2',\n shuttle: 'PUBLIC_API_URL_SHUTTLE',\n fileDispatcher: 'PUBLIC_API_URL_FILE_DISPATCHER',\n },\n source,\n );\n}\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,oBAAiB;AAE5C,SAASC,eAAe,QAAQ,8CAA2C;;AAE3E;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAACC,OAAgB,EAAoC;EAC3F,MAAMC,MAAM,GAAGD,OAAO,CAACH,UAAU,CAACK,MAAM,CAACD,MAAM,CAAC;EAEhD,OAAO,IAAIH,eAAe,CACxB;IACEK,KAAK,EAAE,sBAAsB;IAC7BC,MAAM,EAAE,4BAA4B;IACpCC,MAAM,EAAE,4BAA4B;IACpCC,MAAM,EAAE,4BAA4B;IACpCC,SAAS,EAAE,2BAA2B;IACtCC,OAAO,EAAE,wBAAwB;IACjCC,cAAc,EAAE;EAClB,CAAC,EACDR,MACF,CAAC;AACH"}
@@ -33,4 +33,20 @@ export declare const FetchUtil: {
33
33
  parseBody?: ((response: Response) => Promise<T>) | undefined;
34
34
  }) => readonly [(response: Response) => Promise<ResponseDone<T> | ResponseFail<T>>, (error: unknown) => Promise<ResponseFail<T>>];
35
35
  };
36
+ /**
37
+ * Проверяет, является ли переданное значение ошибкой сети.
38
+ * Основано на исходном коде пакета https://github.com/sindresorhus/is-network-error.
39
+ * Нет возможности использовать пакет is-network-error по причине того что он - ESM only.
40
+ * @param value Проверяемое значение.
41
+ * @return Является ли значение TypeError о том что произошла ошибка сети.
42
+ */
43
+ export declare function isNetworkError(value: unknown): value is TypeError;
44
+ /**
45
+ * Проверяет является ли переданное значение ошибкой обрывания с помощью AbortController.
46
+ * @param value Проверяемое значение.
47
+ * @return Является ли значение ошибкой обрывания.
48
+ */
49
+ export declare function isAbortError(value: unknown): value is {
50
+ name: 'AbortError';
51
+ };
36
52
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/http/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;;;OAIG;8BACY,GAAG,UAAU,mBAAmB,KAAG,IAAI;IAgBtD;;;;;OAKG;+BACa,MAAM,GAAG,GAAG,UAAU,mBAAmB,KAAG,GAAG;IAQ/D;;;;OAIG;kCACgB,MAAM,GAAG,GAAG,KAAG,GAAG;IAQrC;;;;;OAKG;;QAID,mBAAmB;gCACI,QAAQ;+BAaZ,QAAQ,yDAuBX,OAAO;CAMjB,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/http/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;;;OAIG;8BACY,GAAG,UAAU,mBAAmB,KAAG,IAAI;IAgBtD;;;;;OAKG;+BACa,MAAM,GAAG,GAAG,UAAU,mBAAmB,KAAG,GAAG;IAQ/D;;;;OAIG;kCACgB,MAAM,GAAG,GAAG,KAAG,GAAG;IAQrC;;;;;OAKG;;QAID,mBAAmB;gCACI,QAAQ;+BAaZ,QAAQ,yDAuBX,OAAO;CAMjB,CAAC;AA0BX;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAajE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAE5E"}
@@ -4,7 +4,7 @@ export interface PresetTuner {
4
4
  override: <T>(token: Token<T>, provider: Provider<T>) => void;
5
5
  }): void;
6
6
  }
7
- export type KnownHttpApiKey = 'ilium' | 'simaV3' | 'simaV4' | 'simaV6' | 'chponkiV2';
7
+ export type KnownHttpApiKey = 'ilium' | 'simaV3' | 'simaV4' | 'simaV6' | 'chponkiV2' | 'shuttle' | 'fileDispatcher';
8
8
  /**
9
9
  * Строгая версия Map без возможности добавлять/удалять.
10
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/preset/isomorphic/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAClF;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,GAAG,SAAS,MAAM;IAC3C,oCAAoC;IACpC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/preset/isomorphic/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAClF;AAED,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,SAAS,GACT,gBAAgB,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,GAAG,SAAS,MAAM;IAC3C,oCAAoC;IACpC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"axios-logging.d.ts","sourceRoot":"","sources":["../../../../../src/preset/isomorphic/utils/axios-logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EACL,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C;;;GAGG;AACH,qBAAa,YAAa,SAAQ,WAAY,YAAW,oBAAoB;IAC3E,MAAM,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,GAAG;QACtE,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAY5C;;OAEG;IACH,aAAa;IAqBb;;;OAGG;IACH,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc;IAsB1C;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc;CA+DlC"}
1
+ {"version":3,"file":"axios-logging.d.ts","sourceRoot":"","sources":["../../../../../src/preset/isomorphic/utils/axios-logging.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EACL,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C;;;GAGG;AACH,qBAAa,YAAa,SAAQ,WAAY,YAAW,oBAAoB;IAC3E,MAAM,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,GAAG;QACtE,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAY5C;;OAEG;IACH,aAAa;IAqBb;;;OAGG;IACH,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc;IAsB1C;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc;CAgFlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-logging.d.ts","sourceRoot":"","sources":["../../../../../src/preset/isomorphic/utils/fetch-logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAa,WAAW,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAA6B,MAAM,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,qBAAa,YAAa,SAAQ,WAAY,YAAW,UAAU;IACjE,MAAM,EAAE,MAAM,CAAC;IAEf,kBAAkB;gBACN,MAAM,EAAE,MAAM;IAK1B,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO;IAmB9B,kBAAkB;IAClB,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW;IAoB7C,kBAAkB;IAClB,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW;CAuBxC"}
1
+ {"version":3,"file":"fetch-logging.d.ts","sourceRoot":"","sources":["../../../../../src/preset/isomorphic/utils/fetch-logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAa,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzF,OAAO,EAA6B,MAAM,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,qBAAa,YAAa,SAAQ,WAAY,YAAW,UAAU;IACjE,MAAM,EAAE,MAAM,CAAC;IAEf,kBAAkB;gBACN,MAAM,EAAE,MAAM;IAK1B,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO;IAmB9B,kBAAkB;IAClB,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW;IA2C7C,kBAAkB;IAClB,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW;CAiCxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"known-http-api-hosts.d.ts","sourceRoot":"","sources":["../../../../../src/preset/server/providers/known-http-api-hosts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,CAa3F"}
1
+ {"version":3,"file":"known-http-api-hosts.d.ts","sourceRoot":"","sources":["../../../../../src/preset/server/providers/known-http-api-hosts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,CAe3F"}
@@ -1 +1 @@
1
- {"version":3,"file":"known-http-api-hosts.d.ts","sourceRoot":"","sources":["../../../../../src/preset/web/providers/known-http-api-hosts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,CAa3F"}
1
+ {"version":3,"file":"known-http-api-hosts.d.ts","sourceRoot":"","sources":["../../../../../src/preset/web/providers/known-http-api-hosts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,CAe3F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/isomorph",
3
- "version": "11.0.0-alpha.52",
3
+ "version": "11.0.0-alpha.53",
4
4
  "description": "Tiny framework for fast start frontend microservices",
5
5
  "author": "www.sima-land.ru team",
6
6
  "license": "Apache-2.0",
@@ -56,9 +56,9 @@
56
56
  "@opentelemetry/sdk-trace-base": "^1.25.1",
57
57
  "@opentelemetry/sdk-trace-node": "^1.25.1",
58
58
  "@opentelemetry/semantic-conventions": "^1.25.1",
59
- "@sentry/browser": "^8.13.0",
60
- "@sentry/bun": "^8.13.0",
61
- "@sentry/node": "^8.13.0",
59
+ "@sentry/browser": "^8.33.1",
60
+ "@sentry/bun": "^8.33.1",
61
+ "@sentry/node": "^8.33.1",
62
62
  "accepts": "^1.3.8",
63
63
  "dotenv": "^16.3.1",
64
64
  "express": "^4.21.0",