@sima-land/isomorph 11.0.0-alpha.52 → 11.0.0-alpha.54
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.
- package/dist/cjs/http/utils.js +62 -0
- package/dist/cjs/http/utils.js.map +1 -1
- package/dist/cjs/package.json +9 -11
- package/dist/cjs/preset/isomorphic/types.js.map +1 -1
- package/dist/cjs/preset/isomorphic/utils/axios-logging.js +63 -45
- package/dist/cjs/preset/isomorphic/utils/axios-logging.js.map +1 -1
- package/dist/cjs/preset/isomorphic/utils/fetch-logging.js +29 -0
- package/dist/cjs/preset/isomorphic/utils/fetch-logging.js.map +1 -1
- package/dist/cjs/preset/node/index.js +8 -8
- package/dist/cjs/preset/node/index.js.map +1 -1
- package/dist/cjs/preset/node/providers/express-tracing-middleware.js +15 -4
- package/dist/cjs/preset/node/providers/express-tracing-middleware.js.map +1 -1
- package/dist/cjs/preset/node/providers/{tracer-provider.js → telemetry-tracer-provider.js} +7 -10
- package/dist/cjs/preset/node/providers/telemetry-tracer-provider.js.map +1 -0
- package/dist/cjs/preset/{bun/utils/get-stats-handler.js → node/providers/telemetry-tracer-resource.js} +19 -20
- package/dist/cjs/preset/node/providers/telemetry-tracer-resource.js.map +1 -0
- package/dist/cjs/preset/node/providers/{span-exporter.js → telemetry-tracer-span-exporter.js} +6 -5
- package/dist/cjs/preset/node/providers/telemetry-tracer-span-exporter.js.map +1 -0
- package/dist/cjs/preset/node/providers/{tracer.js → telemetry-tracer.js} +2 -2
- package/dist/cjs/preset/node/providers/telemetry-tracer.js.map +1 -0
- package/dist/cjs/preset/node/utils/axios-tracing-middleware.js +9 -24
- package/dist/cjs/preset/node/utils/axios-tracing-middleware.js.map +1 -1
- package/dist/cjs/preset/node/utils/get-fetch-tracing.js +6 -11
- package/dist/cjs/preset/node/utils/get-fetch-tracing.js.map +1 -1
- package/dist/cjs/preset/node/utils/telemetry.js +23 -0
- package/dist/cjs/preset/node/utils/telemetry.js.map +1 -0
- package/dist/cjs/preset/server/providers/known-http-api-hosts.js +3 -1
- package/dist/cjs/preset/server/providers/known-http-api-hosts.js.map +1 -1
- package/dist/cjs/preset/web/providers/known-http-api-hosts.js +3 -1
- package/dist/cjs/preset/web/providers/known-http-api-hosts.js.map +1 -1
- package/dist/cjs/tokens.js +2 -3
- package/dist/cjs/tokens.js.map +1 -1
- package/dist/esm/http/utils.js +60 -0
- package/dist/esm/http/utils.js.map +1 -1
- package/dist/esm/package.json +9 -11
- package/dist/esm/preset/isomorphic/types.js.map +1 -1
- package/dist/esm/preset/isomorphic/utils/axios-logging.js +63 -45
- package/dist/esm/preset/isomorphic/utils/axios-logging.js.map +1 -1
- package/dist/esm/preset/isomorphic/utils/fetch-logging.js +29 -0
- package/dist/esm/preset/isomorphic/utils/fetch-logging.js.map +1 -1
- package/dist/esm/preset/node/index.js +6 -6
- package/dist/esm/preset/node/index.js.map +1 -1
- package/dist/esm/preset/node/providers/express-tracing-middleware.js +15 -4
- package/dist/esm/preset/node/providers/express-tracing-middleware.js.map +1 -1
- package/dist/esm/preset/node/providers/telemetry-tracer-provider.js +19 -0
- package/dist/esm/preset/node/providers/telemetry-tracer-provider.js.map +1 -0
- package/dist/esm/preset/node/providers/telemetry-tracer-resource.js +21 -0
- package/dist/esm/preset/node/providers/telemetry-tracer-resource.js.map +1 -0
- package/dist/esm/preset/node/providers/{span-exporter.js → telemetry-tracer-span-exporter.js} +4 -4
- package/dist/esm/preset/node/providers/telemetry-tracer-span-exporter.js.map +1 -0
- package/dist/esm/preset/node/providers/{tracer.js → telemetry-tracer.js} +2 -2
- package/dist/esm/preset/node/providers/telemetry-tracer.js.map +1 -0
- package/dist/esm/preset/node/utils/axios-tracing-middleware.js +9 -24
- package/dist/esm/preset/node/utils/axios-tracing-middleware.js.map +1 -1
- package/dist/esm/preset/node/utils/get-fetch-tracing.js +7 -12
- package/dist/esm/preset/node/utils/get-fetch-tracing.js.map +1 -1
- package/dist/esm/preset/node/utils/telemetry.js +18 -0
- package/dist/esm/preset/node/utils/telemetry.js.map +1 -0
- package/dist/esm/preset/server/providers/known-http-api-hosts.js +3 -1
- package/dist/esm/preset/server/providers/known-http-api-hosts.js.map +1 -1
- package/dist/esm/preset/web/providers/known-http-api-hosts.js +3 -1
- package/dist/esm/preset/web/providers/known-http-api-hosts.js.map +1 -1
- package/dist/esm/tokens.js +2 -3
- package/dist/esm/tokens.js.map +1 -1
- package/dist/types/http/utils.d.ts +16 -0
- package/dist/types/http/utils.d.ts.map +1 -1
- package/dist/types/preset/isomorphic/types.d.ts +1 -1
- package/dist/types/preset/isomorphic/types.d.ts.map +1 -1
- package/dist/types/preset/isomorphic/utils/axios-logging.d.ts.map +1 -1
- package/dist/types/preset/isomorphic/utils/fetch-logging.d.ts.map +1 -1
- package/dist/types/preset/node/providers/express-tracing-middleware.d.ts.map +1 -1
- package/dist/types/preset/node/providers/telemetry-tracer-provider.d.ts +9 -0
- package/dist/types/preset/node/providers/telemetry-tracer-provider.d.ts.map +1 -0
- package/dist/types/preset/node/providers/telemetry-tracer-resource.d.ts +9 -0
- package/dist/types/preset/node/providers/telemetry-tracer-resource.d.ts.map +1 -0
- package/dist/types/preset/node/providers/{span-exporter.d.ts → telemetry-tracer-span-exporter.d.ts} +3 -3
- package/dist/types/preset/node/providers/telemetry-tracer-span-exporter.d.ts.map +1 -0
- package/dist/types/preset/node/providers/{tracer.d.ts → telemetry-tracer.d.ts} +1 -1
- package/dist/types/preset/node/providers/telemetry-tracer.d.ts.map +1 -0
- package/dist/types/preset/node/utils/axios-tracing-middleware.d.ts +1 -3
- package/dist/types/preset/node/utils/axios-tracing-middleware.d.ts.map +1 -1
- package/dist/types/preset/node/utils/emitter-as-target.d.ts +0 -1
- package/dist/types/preset/node/utils/emitter-as-target.d.ts.map +1 -1
- package/dist/types/preset/node/utils/telemetry.d.ts +8 -0
- package/dist/types/preset/node/utils/telemetry.d.ts.map +1 -0
- package/dist/types/preset/server/providers/known-http-api-hosts.d.ts.map +1 -1
- package/dist/types/preset/server/providers/page-helmet.d.ts +1 -0
- package/dist/types/preset/server/providers/page-helmet.d.ts.map +1 -1
- package/dist/types/preset/server/types.d.ts +1 -0
- package/dist/types/preset/server/types.d.ts.map +1 -1
- package/dist/types/preset/web/providers/known-http-api-hosts.d.ts.map +1 -1
- package/dist/types/tokens.d.ts +3 -2
- package/dist/types/tokens.d.ts.map +1 -1
- package/package.json +10 -31
- package/dist/cjs/preset/bun/index.js +0 -80
- package/dist/cjs/preset/bun/index.js.map +0 -1
- package/dist/cjs/preset/bun/providers/config-source.js +0 -13
- package/dist/cjs/preset/bun/providers/config-source.js.map +0 -1
- package/dist/cjs/preset/bun/providers/log-handler-sentry.js +0 -26
- package/dist/cjs/preset/bun/providers/log-handler-sentry.js.map +0 -1
- package/dist/cjs/preset/bun/providers/logger.js +0 -18
- package/dist/cjs/preset/bun/providers/logger.js.map +0 -1
- package/dist/cjs/preset/bun/providers/serve-metrics.js +0 -25
- package/dist/cjs/preset/bun/providers/serve-metrics.js.map +0 -1
- package/dist/cjs/preset/bun/providers/serve-middleware.js +0 -29
- package/dist/cjs/preset/bun/providers/serve-middleware.js.map +0 -1
- package/dist/cjs/preset/bun/providers/service-routes.js +0 -16
- package/dist/cjs/preset/bun/providers/service-routes.js.map +0 -1
- package/dist/cjs/preset/bun/utils/get-stats-handler.js.map +0 -1
- package/dist/cjs/preset/bun-handler/index.js +0 -62
- package/dist/cjs/preset/bun-handler/index.js.map +0 -1
- package/dist/cjs/preset/bun-handler/providers/accept-type.js +0 -24
- package/dist/cjs/preset/bun-handler/providers/accept-type.js.map +0 -1
- package/dist/cjs/preset/bun-handler/providers/fetch-middleware.js +0 -30
- package/dist/cjs/preset/bun-handler/providers/fetch-middleware.js.map +0 -1
- package/dist/cjs/preset/bun-handler/providers/handler-main.js +0 -75
- package/dist/cjs/preset/bun-handler/providers/handler-main.js.map +0 -1
- package/dist/cjs/preset/bun-handler/providers/specific-params.js +0 -19
- package/dist/cjs/preset/bun-handler/providers/specific-params.js.map +0 -1
- package/dist/cjs/preset/isomorphic/utils/hide-first-id.js +0 -20
- package/dist/cjs/preset/isomorphic/utils/hide-first-id.js.map +0 -1
- package/dist/cjs/preset/node/providers/span-exporter.js.map +0 -1
- package/dist/cjs/preset/node/providers/tracer-provider-resource.js +0 -26
- package/dist/cjs/preset/node/providers/tracer-provider-resource.js.map +0 -1
- package/dist/cjs/preset/node/providers/tracer-provider.js.map +0 -1
- package/dist/cjs/preset/node/providers/tracer.js.map +0 -1
- package/dist/esm/preset/bun/index.js +0 -63
- package/dist/esm/preset/bun/index.js.map +0 -1
- package/dist/esm/preset/bun/providers/config-source.js +0 -6
- package/dist/esm/preset/bun/providers/config-source.js.map +0 -1
- package/dist/esm/preset/bun/providers/log-handler-sentry.js +0 -20
- package/dist/esm/preset/bun/providers/log-handler-sentry.js.map +0 -1
- package/dist/esm/preset/bun/providers/logger.js +0 -12
- package/dist/esm/preset/bun/providers/logger.js.map +0 -1
- package/dist/esm/preset/bun/providers/serve-metrics.js +0 -18
- package/dist/esm/preset/bun/providers/serve-metrics.js.map +0 -1
- package/dist/esm/preset/bun/providers/serve-middleware.js +0 -23
- package/dist/esm/preset/bun/providers/serve-middleware.js.map +0 -1
- package/dist/esm/preset/bun/providers/service-routes.js +0 -10
- package/dist/esm/preset/bun/providers/service-routes.js.map +0 -1
- package/dist/esm/preset/bun/utils/get-stats-handler.js +0 -22
- package/dist/esm/preset/bun/utils/get-stats-handler.js.map +0 -1
- package/dist/esm/preset/bun-handler/index.js +0 -57
- package/dist/esm/preset/bun-handler/index.js.map +0 -1
- package/dist/esm/preset/bun-handler/providers/accept-type.js +0 -18
- package/dist/esm/preset/bun-handler/providers/accept-type.js.map +0 -1
- package/dist/esm/preset/bun-handler/providers/fetch-middleware.js +0 -24
- package/dist/esm/preset/bun-handler/providers/fetch-middleware.js.map +0 -1
- package/dist/esm/preset/bun-handler/providers/handler-main.js +0 -66
- package/dist/esm/preset/bun-handler/providers/handler-main.js.map +0 -1
- package/dist/esm/preset/bun-handler/providers/specific-params.js +0 -13
- package/dist/esm/preset/bun-handler/providers/specific-params.js.map +0 -1
- package/dist/esm/preset/isomorphic/utils/hide-first-id.js +0 -14
- package/dist/esm/preset/isomorphic/utils/hide-first-id.js.map +0 -1
- package/dist/esm/preset/node/providers/span-exporter.js.map +0 -1
- package/dist/esm/preset/node/providers/tracer-provider-resource.js +0 -20
- package/dist/esm/preset/node/providers/tracer-provider-resource.js.map +0 -1
- package/dist/esm/preset/node/providers/tracer-provider.js +0 -22
- package/dist/esm/preset/node/providers/tracer-provider.js.map +0 -1
- package/dist/esm/preset/node/providers/tracer.js.map +0 -1
- package/dist/types/preset/bun/index.d.ts +0 -10
- package/dist/types/preset/bun/index.d.ts.map +0 -1
- package/dist/types/preset/bun/providers/config-source.d.ts +0 -3
- package/dist/types/preset/bun/providers/config-source.d.ts.map +0 -1
- package/dist/types/preset/bun/providers/log-handler-sentry.d.ts +0 -3
- package/dist/types/preset/bun/providers/log-handler-sentry.d.ts.map +0 -1
- package/dist/types/preset/bun/providers/logger.d.ts +0 -4
- package/dist/types/preset/bun/providers/logger.d.ts.map +0 -1
- package/dist/types/preset/bun/providers/serve-metrics.d.ts +0 -3
- package/dist/types/preset/bun/providers/serve-metrics.d.ts.map +0 -1
- package/dist/types/preset/bun/providers/serve-middleware.d.ts +0 -4
- package/dist/types/preset/bun/providers/serve-middleware.d.ts.map +0 -1
- package/dist/types/preset/bun/providers/service-routes.d.ts +0 -3
- package/dist/types/preset/bun/providers/service-routes.d.ts.map +0 -1
- package/dist/types/preset/bun/utils/get-stats-handler.d.ts +0 -7
- package/dist/types/preset/bun/utils/get-stats-handler.d.ts.map +0 -1
- package/dist/types/preset/bun-handler/index.d.ts +0 -9
- package/dist/types/preset/bun-handler/index.d.ts.map +0 -1
- package/dist/types/preset/bun-handler/providers/accept-type.d.ts +0 -11
- package/dist/types/preset/bun-handler/providers/accept-type.d.ts.map +0 -1
- package/dist/types/preset/bun-handler/providers/fetch-middleware.d.ts +0 -4
- package/dist/types/preset/bun-handler/providers/fetch-middleware.d.ts.map +0 -1
- package/dist/types/preset/bun-handler/providers/handler-main.d.ts +0 -3
- package/dist/types/preset/bun-handler/providers/handler-main.d.ts.map +0 -1
- package/dist/types/preset/bun-handler/providers/specific-params.d.ts +0 -3
- package/dist/types/preset/bun-handler/providers/specific-params.d.ts.map +0 -1
- package/dist/types/preset/isomorphic/utils/hide-first-id.d.ts +0 -11
- package/dist/types/preset/isomorphic/utils/hide-first-id.d.ts.map +0 -1
- package/dist/types/preset/node/providers/span-exporter.d.ts.map +0 -1
- package/dist/types/preset/node/providers/tracer-provider-resource.d.ts +0 -9
- package/dist/types/preset/node/providers/tracer-provider-resource.d.ts.map +0 -1
- package/dist/types/preset/node/providers/tracer-provider.d.ts +0 -9
- package/dist/types/preset/node/providers/tracer-provider.d.ts.map +0 -1
- package/dist/types/preset/node/providers/tracer.d.ts.map +0 -1
package/dist/cjs/http/utils.js
CHANGED
|
@@ -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":"
|
|
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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"}
|
package/dist/cjs/package.json
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "commonjs",
|
|
3
3
|
"name": "@sima-land/isomorph",
|
|
4
|
-
"version": "11.0.0-alpha.
|
|
4
|
+
"version": "11.0.0-alpha.54",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@humanwhocodes/env": "^3.0.5",
|
|
7
7
|
"@krutoo/fetch-tools": "^0.0.16",
|
|
8
8
|
"@opentelemetry/api": "^1.9.0",
|
|
9
9
|
"@opentelemetry/exporter-prometheus": "^0.52.1",
|
|
10
|
-
"@opentelemetry/exporter-trace-otlp-
|
|
11
|
-
"@opentelemetry/
|
|
12
|
-
"@opentelemetry/
|
|
13
|
-
"@opentelemetry/sdk-
|
|
14
|
-
"@opentelemetry/sdk-trace-
|
|
15
|
-
"@opentelemetry/
|
|
16
|
-
"@
|
|
17
|
-
"@sentry/
|
|
18
|
-
"@sentry/bun": "^8.13.0",
|
|
19
|
-
"@sentry/node": "^8.13.0",
|
|
10
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.56.0",
|
|
11
|
+
"@opentelemetry/resources": "^1.30.1",
|
|
12
|
+
"@opentelemetry/sdk-metrics": "^1.30.1",
|
|
13
|
+
"@opentelemetry/sdk-trace-base": "^1.30.1",
|
|
14
|
+
"@opentelemetry/sdk-trace-node": "^1.30.1",
|
|
15
|
+
"@opentelemetry/semantic-conventions": "1.28.0",
|
|
16
|
+
"@sentry/browser": "^8.33.1",
|
|
17
|
+
"@sentry/node": "^8.33.1",
|
|
20
18
|
"accepts": "^1.3.8",
|
|
21
19
|
"dotenv": "^16.3.1",
|
|
22
20
|
"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
|
|
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
|
-
|
|
103
|
-
|
|
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":["
|
|
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","
|
|
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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"}
|
|
@@ -44,11 +44,11 @@ var _expressTracingMiddleware = require("./providers/express-tracing-middleware"
|
|
|
44
44
|
var _knownHttpApiHosts = require("../server/providers/known-http-api-hosts");
|
|
45
45
|
var _logger = require("./providers/logger");
|
|
46
46
|
var _metricsExpressApp = require("./providers/metrics-express-app");
|
|
47
|
-
var
|
|
47
|
+
var _telemetryTracer = require("./providers/telemetry-tracer");
|
|
48
|
+
var _telemetryTracerSpanExporter = require("./providers/telemetry-tracer-span-exporter");
|
|
48
49
|
var _ssrBridgeServerSide = require("../server/providers/ssr-bridge-server-side");
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var _tracerProviderResource = require("./providers/tracer-provider-resource");
|
|
50
|
+
var _telemetryTracerProvider = require("./providers/telemetry-tracer-provider");
|
|
51
|
+
var _telemetryTracerResource = require("./providers/telemetry-tracer-resource");
|
|
52
52
|
var _mainExpressApp = require("./providers/main-express-app");
|
|
53
53
|
var _getClientIp = require("./utils/get-client-ip");
|
|
54
54
|
var _getForwardedHeaders = require("./utils/get-forwarded-headers");
|
|
@@ -71,10 +71,10 @@ function PresetNode(customize) {
|
|
|
71
71
|
preset.set(_tokens.KnownToken.logger, _logger.provideLogger);
|
|
72
72
|
|
|
73
73
|
// tracing
|
|
74
|
-
preset.set(_tokens.KnownToken.Tracing.tracer,
|
|
75
|
-
preset.set(_tokens.KnownToken.Tracing.spanExporter,
|
|
76
|
-
preset.set(_tokens.KnownToken.Tracing.
|
|
77
|
-
preset.set(_tokens.KnownToken.Tracing.
|
|
74
|
+
preset.set(_tokens.KnownToken.Tracing.tracer, _telemetryTracer.provideTracer);
|
|
75
|
+
preset.set(_tokens.KnownToken.Tracing.spanExporter, _telemetryTracerSpanExporter.provideSpanExporter);
|
|
76
|
+
preset.set(_tokens.KnownToken.Tracing.provider, _telemetryTracerProvider.provideTracingProvider);
|
|
77
|
+
preset.set(_tokens.KnownToken.Tracing.resource, _telemetryTracerResource.provideTracingResource);
|
|
78
78
|
|
|
79
79
|
// metrics
|
|
80
80
|
preset.set(_tokens.KnownToken.Metrics.expressApp, _metricsExpressApp.provideMetricsExpressApp);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_tokens","require","_axiosFactory","_fetch","_baseConfig","_di","_healthCheck","_configSource","_expressErrorMiddleware","_expressFactory","_expressLogMiddleware","_expressMetricsMiddleware","_expressRequestMiddleware","_expressTracingMiddleware","_knownHttpApiHosts","_logger","_metricsExpressApp","_spanExporter","_ssrBridgeServerSide","_tracer","_tracerProvider","_tracerProviderResource","_mainExpressApp","_getClientIp","_getForwardedHeaders","_getPageResponseFormat","_handlerProvider","PresetNode","customize","preset","createPreset","set","KnownToken","Config","source","provideConfigSource","base","provideBaseConfig","logger","provideLogger","Tracing","tracer","provideTracer","spanExporter","provideSpanExporter","tracerProvider","provideTracerProvider","tracerProviderResource","provideTracerProviderResource","Metrics","expressApp","provideMetricsExpressApp","Http","fetch","provideFetch","Fetch","middleware","Serve","Proxy","config","Axios","factory","provideAxiosFactory","Express","app","provideMainExpressApp","pageRoutes","serviceRoutes","resolve","Handlers","healthCheck","Middleware","request","log","metrics","tracing","endMiddleware","error","provideExpressFactory","provideExpressRequestMiddleware","provideExpressLogMiddleware","provideExpressMetricsMiddleware","provideExpressTracingMiddleware","provideExpressErrorMiddleware","Api","knownHosts","provideKnownHttpApiHosts","SsrBridge","serverSide","provideSsrBridgeServerSide","override","bind"],"sources":["../../../../src/preset/node/index.ts"],"sourcesContent":["import { KnownToken } from '../../tokens';\nimport { provideAxiosFactory } from '../isomorphic/providers/axios-factory';\nimport { provideFetch } from '../isomorphic/providers/fetch';\nimport { provideBaseConfig } from '../isomorphic/providers/base-config';\nimport { Preset, createPreset } from '../../di';\nimport { PresetTuner } from '../isomorphic/types';\nimport { healthCheck } from '../../utils/express/handler/health-check';\nimport { provideConfigSource } from './providers/config-source';\nimport { provideExpressErrorMiddleware } from './providers/express-error-middleware';\nimport { provideExpressFactory } from './providers/express-factory';\nimport { provideExpressLogMiddleware } from './providers/express-log-middleware';\nimport { provideExpressMetricsMiddleware } from './providers/express-metrics-middleware';\nimport { provideExpressRequestMiddleware } from './providers/express-request-middleware';\nimport { provideExpressTracingMiddleware } from './providers/express-tracing-middleware';\nimport { provideKnownHttpApiHosts } from '../server/providers/known-http-api-hosts';\nimport { provideLogger } from './providers/logger';\nimport { provideMetricsExpressApp } from './providers/metrics-express-app';\nimport { provideSpanExporter } from './providers/span-exporter';\nimport { provideSsrBridgeServerSide } from '../server/providers/ssr-bridge-server-side';\nimport { provideTracer } from './providers/tracer';\nimport { provideTracerProvider } from './providers/tracer-provider';\nimport { provideTracerProviderResource } from './providers/tracer-provider-resource';\nimport { provideMainExpressApp } from './providers/main-express-app';\nimport { ExpressRouteList } from './types';\n\n/**\n * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.\n * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.\n * @return Preset.\n */\nexport function PresetNode(customize?: PresetTuner): Preset {\n // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости\n const preset = createPreset();\n\n // config\n preset.set(KnownToken.Config.source, provideConfigSource);\n preset.set(KnownToken.Config.base, provideBaseConfig);\n\n // log\n preset.set(KnownToken.logger, provideLogger);\n\n // tracing\n preset.set(KnownToken.Tracing.tracer, provideTracer);\n preset.set(KnownToken.Tracing.spanExporter, provideSpanExporter);\n preset.set(KnownToken.Tracing.tracerProvider, provideTracerProvider);\n preset.set(KnownToken.Tracing.tracerProviderResource, provideTracerProviderResource);\n\n // metrics\n preset.set(KnownToken.Metrics.expressApp, provideMetricsExpressApp);\n\n // fetch\n preset.set(KnownToken.Http.fetch, provideFetch);\n preset.set(KnownToken.Http.Fetch.middleware, () => []);\n preset.set(KnownToken.Http.Serve.Proxy.config, () => null);\n\n // axios\n preset.set(KnownToken.Axios.factory, provideAxiosFactory);\n preset.set(KnownToken.Axios.middleware, () => []);\n\n // express\n preset.set(KnownToken.Express.app, provideMainExpressApp);\n preset.set(KnownToken.Express.pageRoutes, () => []);\n preset.set(\n KnownToken.Express.serviceRoutes,\n (resolve): ExpressRouteList => [\n ['/healthcheck', resolve(KnownToken.Express.Handlers.healthCheck)],\n ],\n );\n preset.set(KnownToken.Express.middleware, resolve => [\n resolve(KnownToken.Express.Middleware.request),\n resolve(KnownToken.Express.Middleware.log),\n resolve(KnownToken.Express.Middleware.metrics),\n resolve(KnownToken.Express.Middleware.tracing),\n ]);\n preset.set(KnownToken.Express.endMiddleware, resolve => [\n resolve(KnownToken.Express.Middleware.error),\n ]);\n preset.set(KnownToken.Express.factory, provideExpressFactory);\n preset.set(KnownToken.Express.Handlers.healthCheck, healthCheck);\n preset.set(KnownToken.Express.Middleware.request, provideExpressRequestMiddleware);\n preset.set(KnownToken.Express.Middleware.log, provideExpressLogMiddleware);\n preset.set(KnownToken.Express.Middleware.metrics, provideExpressMetricsMiddleware);\n preset.set(KnownToken.Express.Middleware.tracing, provideExpressTracingMiddleware);\n preset.set(KnownToken.Express.Middleware.error, provideExpressErrorMiddleware);\n\n // http api\n preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);\n\n // ssr bridge\n preset.set(KnownToken.SsrBridge.serverSide, provideSsrBridgeServerSide);\n\n if (customize) {\n customize({ override: preset.set.bind(preset) });\n }\n\n return preset;\n}\n\nexport type { ExpressHandlerContext, ExpressRouteList } from './types';\n\n// доступные утилиты\nexport { getClientIp } from './utils/get-client-ip';\nexport { getForwardedHeaders } from './utils/get-forwarded-headers';\nexport { getPageResponseFormat } from './utils/get-page-response-format';\nexport { HandlerProvider } from './utils/handler-provider';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_tokens","require","_axiosFactory","_fetch","_baseConfig","_di","_healthCheck","_configSource","_expressErrorMiddleware","_expressFactory","_expressLogMiddleware","_expressMetricsMiddleware","_expressRequestMiddleware","_expressTracingMiddleware","_knownHttpApiHosts","_logger","_metricsExpressApp","_telemetryTracer","_telemetryTracerSpanExporter","_ssrBridgeServerSide","_telemetryTracerProvider","_telemetryTracerResource","_mainExpressApp","_getClientIp","_getForwardedHeaders","_getPageResponseFormat","_handlerProvider","PresetNode","customize","preset","createPreset","set","KnownToken","Config","source","provideConfigSource","base","provideBaseConfig","logger","provideLogger","Tracing","tracer","provideTracer","spanExporter","provideSpanExporter","provider","provideTracingProvider","resource","provideTracingResource","Metrics","expressApp","provideMetricsExpressApp","Http","fetch","provideFetch","Fetch","middleware","Serve","Proxy","config","Axios","factory","provideAxiosFactory","Express","app","provideMainExpressApp","pageRoutes","serviceRoutes","resolve","Handlers","healthCheck","Middleware","request","log","metrics","tracing","endMiddleware","error","provideExpressFactory","provideExpressRequestMiddleware","provideExpressLogMiddleware","provideExpressMetricsMiddleware","provideExpressTracingMiddleware","provideExpressErrorMiddleware","Api","knownHosts","provideKnownHttpApiHosts","SsrBridge","serverSide","provideSsrBridgeServerSide","override","bind"],"sources":["../../../../src/preset/node/index.ts"],"sourcesContent":["import { KnownToken } from '../../tokens';\nimport { provideAxiosFactory } from '../isomorphic/providers/axios-factory';\nimport { provideFetch } from '../isomorphic/providers/fetch';\nimport { provideBaseConfig } from '../isomorphic/providers/base-config';\nimport { Preset, createPreset } from '../../di';\nimport { PresetTuner } from '../isomorphic/types';\nimport { healthCheck } from '../../utils/express/handler/health-check';\nimport { provideConfigSource } from './providers/config-source';\nimport { provideExpressErrorMiddleware } from './providers/express-error-middleware';\nimport { provideExpressFactory } from './providers/express-factory';\nimport { provideExpressLogMiddleware } from './providers/express-log-middleware';\nimport { provideExpressMetricsMiddleware } from './providers/express-metrics-middleware';\nimport { provideExpressRequestMiddleware } from './providers/express-request-middleware';\nimport { provideExpressTracingMiddleware } from './providers/express-tracing-middleware';\nimport { provideKnownHttpApiHosts } from '../server/providers/known-http-api-hosts';\nimport { provideLogger } from './providers/logger';\nimport { provideMetricsExpressApp } from './providers/metrics-express-app';\nimport { provideTracer } from './providers/telemetry-tracer';\nimport { provideSpanExporter } from './providers/telemetry-tracer-span-exporter';\nimport { provideSsrBridgeServerSide } from '../server/providers/ssr-bridge-server-side';\nimport { provideTracingProvider } from './providers/telemetry-tracer-provider';\nimport { provideTracingResource } from './providers/telemetry-tracer-resource';\nimport { provideMainExpressApp } from './providers/main-express-app';\nimport { ExpressRouteList } from './types';\n\n/**\n * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.\n * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.\n * @return Preset.\n */\nexport function PresetNode(customize?: PresetTuner): Preset {\n // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости\n const preset = createPreset();\n\n // config\n preset.set(KnownToken.Config.source, provideConfigSource);\n preset.set(KnownToken.Config.base, provideBaseConfig);\n\n // log\n preset.set(KnownToken.logger, provideLogger);\n\n // tracing\n preset.set(KnownToken.Tracing.tracer, provideTracer);\n preset.set(KnownToken.Tracing.spanExporter, provideSpanExporter);\n preset.set(KnownToken.Tracing.provider, provideTracingProvider);\n preset.set(KnownToken.Tracing.resource, provideTracingResource);\n\n // metrics\n preset.set(KnownToken.Metrics.expressApp, provideMetricsExpressApp);\n\n // fetch\n preset.set(KnownToken.Http.fetch, provideFetch);\n preset.set(KnownToken.Http.Fetch.middleware, () => []);\n preset.set(KnownToken.Http.Serve.Proxy.config, () => null);\n\n // axios\n preset.set(KnownToken.Axios.factory, provideAxiosFactory);\n preset.set(KnownToken.Axios.middleware, () => []);\n\n // express\n preset.set(KnownToken.Express.app, provideMainExpressApp);\n preset.set(KnownToken.Express.pageRoutes, () => []);\n preset.set(\n KnownToken.Express.serviceRoutes,\n (resolve): ExpressRouteList => [\n ['/healthcheck', resolve(KnownToken.Express.Handlers.healthCheck)],\n ],\n );\n preset.set(KnownToken.Express.middleware, resolve => [\n resolve(KnownToken.Express.Middleware.request),\n resolve(KnownToken.Express.Middleware.log),\n resolve(KnownToken.Express.Middleware.metrics),\n resolve(KnownToken.Express.Middleware.tracing),\n ]);\n preset.set(KnownToken.Express.endMiddleware, resolve => [\n resolve(KnownToken.Express.Middleware.error),\n ]);\n preset.set(KnownToken.Express.factory, provideExpressFactory);\n preset.set(KnownToken.Express.Handlers.healthCheck, healthCheck);\n preset.set(KnownToken.Express.Middleware.request, provideExpressRequestMiddleware);\n preset.set(KnownToken.Express.Middleware.log, provideExpressLogMiddleware);\n preset.set(KnownToken.Express.Middleware.metrics, provideExpressMetricsMiddleware);\n preset.set(KnownToken.Express.Middleware.tracing, provideExpressTracingMiddleware);\n preset.set(KnownToken.Express.Middleware.error, provideExpressErrorMiddleware);\n\n // http api\n preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);\n\n // ssr bridge\n preset.set(KnownToken.SsrBridge.serverSide, provideSsrBridgeServerSide);\n\n if (customize) {\n customize({ override: preset.set.bind(preset) });\n }\n\n return preset;\n}\n\nexport type { ExpressHandlerContext, ExpressRouteList } from './types';\n\n// доступные утилиты\nexport { getClientIp } from './utils/get-client-ip';\nexport { getForwardedHeaders } from './utils/get-forwarded-headers';\nexport { getPageResponseFormat } from './utils/get-page-response-format';\nexport { HandlerProvider } from './utils/handler-provider';\n"],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ exports.provideExpressTracingMiddleware = provideExpressTracingMiddleware;
|
|
|
7
7
|
var _tokens = require("../../../tokens");
|
|
8
8
|
var _api = require("@opentelemetry/api");
|
|
9
9
|
var _server = require("../../server");
|
|
10
|
+
var _incubating = require("@opentelemetry/semantic-conventions/incubating");
|
|
10
11
|
/**
|
|
11
12
|
* Провайдер промежуточного слоя трассировки входящих http-запросов.
|
|
12
13
|
* @param resolve Функция для получения зависимости по токену.
|
|
@@ -22,18 +23,18 @@ function provideExpressTracingMiddleware(resolve) {
|
|
|
22
23
|
*/
|
|
23
24
|
const getConventionalRequestAttrs = req => {
|
|
24
25
|
const result = {
|
|
25
|
-
|
|
26
|
+
[_incubating.ATTR_URL_PATH]: req.originalUrl
|
|
26
27
|
};
|
|
27
28
|
for (const headerName in req.headers) {
|
|
28
29
|
if (headerName.toLowerCase().startsWith('simaland-')) {
|
|
29
|
-
result[headerName] = req.header(headerName);
|
|
30
|
+
result[`${(0, _incubating.ATTR_HTTP_REQUEST_HEADER)(headerName)}`] = req.header(headerName);
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
return result;
|
|
33
34
|
};
|
|
34
35
|
return (req, res, next) => {
|
|
35
36
|
const externalContext = _api.propagation.extract(_api.ROOT_CONTEXT, req.headers);
|
|
36
|
-
const rootSpan = tracer.startSpan(
|
|
37
|
+
const rootSpan = tracer.startSpan(`${req.method} ${req.path}`, undefined, externalContext);
|
|
37
38
|
rootSpan.setAttributes(getConventionalRequestAttrs(req));
|
|
38
39
|
const rootContext = _api.trace.setSpan(externalContext, rootSpan);
|
|
39
40
|
res.locals.tracing = {
|
|
@@ -42,12 +43,22 @@ function provideExpressTracingMiddleware(resolve) {
|
|
|
42
43
|
renderSpan: null
|
|
43
44
|
};
|
|
44
45
|
res.once(_server.PAGE_HANDLER_EVENT_TYPE.renderStart, () => {
|
|
45
|
-
res.locals.tracing.renderSpan = tracer.startSpan('
|
|
46
|
+
res.locals.tracing.renderSpan = tracer.startSpan('react:renderToString', undefined, rootContext);
|
|
46
47
|
res.once(_server.PAGE_HANDLER_EVENT_TYPE.renderFinish, () => {
|
|
47
48
|
res.locals.tracing.renderSpan.end();
|
|
48
49
|
});
|
|
49
50
|
});
|
|
50
51
|
res.once('finish', () => {
|
|
52
|
+
const contentLength = res.getHeader('content-length');
|
|
53
|
+
rootSpan.setAttributes({
|
|
54
|
+
[_incubating.ATTR_HTTP_RESPONSE_STATUS_CODE]: String(res.statusCode),
|
|
55
|
+
...(res.statusCode > 400 && {
|
|
56
|
+
[_incubating.ATTR_ERROR_TYPE]: String(res.statusCode)
|
|
57
|
+
}),
|
|
58
|
+
...(contentLength && {
|
|
59
|
+
[_incubating.ATTR_HTTP_RESPONSE_BODY_SIZE]: contentLength
|
|
60
|
+
})
|
|
61
|
+
});
|
|
51
62
|
rootSpan.end();
|
|
52
63
|
});
|
|
53
64
|
next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express-tracing-middleware.js","names":["_tokens","require","_api","_server","provideExpressTracingMiddleware","resolve","tracer","KnownToken","Tracing","getConventionalRequestAttrs","req","result","originalUrl","headerName","headers","toLowerCase","startsWith","header","res","next","externalContext","propagation","extract","ROOT_CONTEXT","rootSpan","startSpan","undefined","setAttributes","rootContext","trace","setSpan","locals","tracing","renderSpan","once","PAGE_HANDLER_EVENT_TYPE","renderStart","renderFinish","end"],"sources":["../../../../../src/preset/node/providers/express-tracing-middleware.ts"],"sourcesContent":["import type express from 'express';\nimport type { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport { ROOT_CONTEXT, propagation, trace } from '@opentelemetry/api';\nimport { PAGE_HANDLER_EVENT_TYPE } from '../../server';\n\n/**\n * Провайдер промежуточного слоя трассировки входящих http-запросов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Промежуточный слой.\n */\nexport function provideExpressTracingMiddleware(resolve: Resolve): express.Handler {\n const tracer = resolve(KnownToken.Tracing.tracer);\n\n /**\n * Возвращает набор стандартных атрибутов для спана.\n * @param req Входящий http-запрос.\n * @return Атрибуты.\n */\n const getConventionalRequestAttrs = (
|
|
1
|
+
{"version":3,"file":"express-tracing-middleware.js","names":["_tokens","require","_api","_server","_incubating","provideExpressTracingMiddleware","resolve","tracer","KnownToken","Tracing","getConventionalRequestAttrs","req","result","ATTR_URL_PATH","originalUrl","headerName","headers","toLowerCase","startsWith","ATTR_HTTP_REQUEST_HEADER","header","res","next","externalContext","propagation","extract","ROOT_CONTEXT","rootSpan","startSpan","method","path","undefined","setAttributes","rootContext","trace","setSpan","locals","tracing","renderSpan","once","PAGE_HANDLER_EVENT_TYPE","renderStart","renderFinish","end","contentLength","getHeader","ATTR_HTTP_RESPONSE_STATUS_CODE","String","statusCode","ATTR_ERROR_TYPE","ATTR_HTTP_RESPONSE_BODY_SIZE"],"sources":["../../../../../src/preset/node/providers/express-tracing-middleware.ts"],"sourcesContent":["import type express from 'express';\nimport type { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport { Attributes, ROOT_CONTEXT, propagation, trace } from '@opentelemetry/api';\nimport { PAGE_HANDLER_EVENT_TYPE } from '../../server';\nimport {\n ATTR_ERROR_TYPE,\n ATTR_HTTP_REQUEST_HEADER,\n ATTR_HTTP_RESPONSE_BODY_SIZE,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_URL_PATH,\n} from '@opentelemetry/semantic-conventions/incubating';\n\n/**\n * Провайдер промежуточного слоя трассировки входящих http-запросов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Промежуточный слой.\n */\nexport function provideExpressTracingMiddleware(resolve: Resolve): express.Handler {\n const tracer = resolve(KnownToken.Tracing.tracer);\n\n /**\n * Возвращает набор стандартных атрибутов для спана.\n * @param req Входящий http-запрос.\n * @return Атрибуты.\n */\n const getConventionalRequestAttrs = (req: express.Request): Attributes => {\n const result: Attributes = {\n [ATTR_URL_PATH]: req.originalUrl,\n };\n\n for (const headerName in req.headers) {\n if (headerName.toLowerCase().startsWith('simaland-')) {\n result[`${ATTR_HTTP_REQUEST_HEADER(headerName)}`] = req.header(headerName);\n }\n }\n\n return result;\n };\n\n return (req, res, next) => {\n const externalContext = propagation.extract(ROOT_CONTEXT, req.headers);\n const rootSpan = tracer.startSpan(`${req.method} ${req.path}`, undefined, externalContext);\n\n rootSpan.setAttributes(getConventionalRequestAttrs(req));\n\n const rootContext = trace.setSpan(externalContext, rootSpan);\n\n res.locals.tracing = {\n rootSpan,\n rootContext,\n renderSpan: null,\n };\n\n res.once(PAGE_HANDLER_EVENT_TYPE.renderStart, () => {\n res.locals.tracing.renderSpan = tracer.startSpan(\n 'react:renderToString',\n undefined,\n rootContext,\n );\n\n res.once(PAGE_HANDLER_EVENT_TYPE.renderFinish, () => {\n res.locals.tracing.renderSpan.end();\n });\n });\n\n res.once('finish', () => {\n const contentLength = res.getHeader('content-length') as string;\n rootSpan.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: String(res.statusCode),\n ...(res.statusCode > 400 && { [ATTR_ERROR_TYPE]: String(res.statusCode) }),\n ...(contentLength && { [ATTR_HTTP_RESPONSE_BODY_SIZE]: contentLength }),\n });\n rootSpan.end();\n });\n\n next();\n };\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAQA;AACA;AACA;AACA;AACA;AACO,SAASI,+BAA+BA,CAACC,OAAgB,EAAmB;EACjF,MAAMC,MAAM,GAAGD,OAAO,CAACE,kBAAU,CAACC,OAAO,CAACF,MAAM,CAAC;;EAEjD;AACF;AACA;AACA;AACA;EACE,MAAMG,2BAA2B,GAAIC,GAAoB,IAAiB;IACxE,MAAMC,MAAkB,GAAG;MACzB,CAACC,yBAAa,GAAGF,GAAG,CAACG;IACvB,CAAC;IAED,KAAK,MAAMC,UAAU,IAAIJ,GAAG,CAACK,OAAO,EAAE;MACpC,IAAID,UAAU,CAACE,WAAW,CAAC,CAAC,CAACC,UAAU,CAAC,WAAW,CAAC,EAAE;QACpDN,MAAM,CAAE,GAAE,IAAAO,oCAAwB,EAACJ,UAAU,CAAE,EAAC,CAAC,GAAGJ,GAAG,CAACS,MAAM,CAACL,UAAU,CAAC;MAC5E;IACF;IAEA,OAAOH,MAAM;EACf,CAAC;EAED,OAAO,CAACD,GAAG,EAAEU,GAAG,EAAEC,IAAI,KAAK;IACzB,MAAMC,eAAe,GAAGC,gBAAW,CAACC,OAAO,CAACC,iBAAY,EAAEf,GAAG,CAACK,OAAO,CAAC;IACtE,MAAMW,QAAQ,GAAGpB,MAAM,CAACqB,SAAS,CAAE,GAAEjB,GAAG,CAACkB,MAAO,IAAGlB,GAAG,CAACmB,IAAK,EAAC,EAAEC,SAAS,EAAER,eAAe,CAAC;IAE1FI,QAAQ,CAACK,aAAa,CAACtB,2BAA2B,CAACC,GAAG,CAAC,CAAC;IAExD,MAAMsB,WAAW,GAAGC,UAAK,CAACC,OAAO,CAACZ,eAAe,EAAEI,QAAQ,CAAC;IAE5DN,GAAG,CAACe,MAAM,CAACC,OAAO,GAAG;MACnBV,QAAQ;MACRM,WAAW;MACXK,UAAU,EAAE;IACd,CAAC;IAEDjB,GAAG,CAACkB,IAAI,CAACC,+BAAuB,CAACC,WAAW,EAAE,MAAM;MAClDpB,GAAG,CAACe,MAAM,CAACC,OAAO,CAACC,UAAU,GAAG/B,MAAM,CAACqB,SAAS,CAC9C,sBAAsB,EACtBG,SAAS,EACTE,WACF,CAAC;MAEDZ,GAAG,CAACkB,IAAI,CAACC,+BAAuB,CAACE,YAAY,EAAE,MAAM;QACnDrB,GAAG,CAACe,MAAM,CAACC,OAAO,CAACC,UAAU,CAACK,GAAG,CAAC,CAAC;MACrC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFtB,GAAG,CAACkB,IAAI,CAAC,QAAQ,EAAE,MAAM;MACvB,MAAMK,aAAa,GAAGvB,GAAG,CAACwB,SAAS,CAAC,gBAAgB,CAAW;MAC/DlB,QAAQ,CAACK,aAAa,CAAC;QACrB,CAACc,0CAA8B,GAAGC,MAAM,CAAC1B,GAAG,CAAC2B,UAAU,CAAC;QACxD,IAAI3B,GAAG,CAAC2B,UAAU,GAAG,GAAG,IAAI;UAAE,CAACC,2BAAe,GAAGF,MAAM,CAAC1B,GAAG,CAAC2B,UAAU;QAAE,CAAC,CAAC;QAC1E,IAAIJ,aAAa,IAAI;UAAE,CAACM,wCAA4B,GAAGN;QAAc,CAAC;MACxE,CAAC,CAAC;MACFjB,QAAQ,CAACgB,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC;IAEFrB,IAAI,CAAC,CAAC;EACR,CAAC;AACH"}
|
|
@@ -3,25 +3,22 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.provideTracingProvider = provideTracingProvider;
|
|
7
7
|
var _sdkTraceNode = require("@opentelemetry/sdk-trace-node");
|
|
8
|
-
var _propagatorJaeger = require("@opentelemetry/propagator-jaeger");
|
|
9
8
|
var _tokens = require("../../../tokens");
|
|
10
9
|
/**
|
|
11
10
|
* Провайдер объекта BasicTracerProvider.
|
|
12
11
|
* @param resolve Функция для получения зависимости по токену.
|
|
13
12
|
* @return BasicTracerProvider.
|
|
14
13
|
*/
|
|
15
|
-
function
|
|
14
|
+
function provideTracingProvider(resolve) {
|
|
16
15
|
const exporter = resolve(_tokens.KnownToken.Tracing.spanExporter);
|
|
17
|
-
const resource = resolve(_tokens.KnownToken.Tracing.
|
|
16
|
+
const resource = resolve(_tokens.KnownToken.Tracing.resource);
|
|
18
17
|
const provider = new _sdkTraceNode.NodeTracerProvider({
|
|
19
|
-
resource
|
|
20
|
-
|
|
21
|
-
provider.addSpanProcessor(new _sdkTraceNode.BatchSpanProcessor(exporter));
|
|
22
|
-
provider.register({
|
|
23
|
-
propagator: new _propagatorJaeger.JaegerPropagator()
|
|
18
|
+
resource,
|
|
19
|
+
spanProcessors: [new _sdkTraceNode.BatchSpanProcessor(exporter)]
|
|
24
20
|
});
|
|
21
|
+
provider.register();
|
|
25
22
|
return provider;
|
|
26
23
|
}
|
|
27
|
-
//# sourceMappingURL=tracer-provider.js.map
|
|
24
|
+
//# sourceMappingURL=telemetry-tracer-provider.js.map
|