@vtex/api 6.45.21-beta → 6.45.21-beta.1
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/CHANGELOG.md +7 -1
- package/lib/service/tracing/tracingMiddlewares.js +8 -7
- package/lib/service/worker/runtime/builtIn/handlers.js +6 -6
- package/lib/service/worker/runtime/statusTrack.js +3 -3
- package/lib/service/worker/runtime/typings.d.ts +1 -1
- package/lib/service/worker/runtime/utils/context.js +1 -1
- package/lib/tracing/UserLandTracer.d.ts +7 -7
- package/lib/tracing/UserLandTracer.js +2 -1
- package/lib/tracing/errorReporting/ErrorReport.d.ts +1 -1
- package/lib/tracing/errorReporting/ErrorReport.js +2 -2
- package/lib/tracing/utils.d.ts +2 -2
- package/lib/tracing/utils.js +3 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [6.45.21-beta.1] - 2023-09-07
|
|
11
|
+
|
|
12
|
+
## [6.45.21-beta.0] - 2023-09-04
|
|
13
|
+
|
|
10
14
|
## [6.45.21-beta] - 2023-09-04
|
|
11
15
|
|
|
12
16
|
## [6.45.20] - 2023-08-30
|
|
@@ -1778,11 +1782,13 @@ instead
|
|
|
1778
1782
|
- `HttpClient` now adds `'Accept-Encoding': 'gzip'` header by default.
|
|
1779
1783
|
|
|
1780
1784
|
|
|
1781
|
-
[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.45.21-beta...HEAD
|
|
1785
|
+
[Unreleased]: https://github.com/vtex/node-vtex-api/compare/v6.45.21-beta.1...HEAD
|
|
1782
1786
|
[6.45.15]: https://github.com/vtex/node-vtex-api/compare/v6.45.14...v6.45.15
|
|
1783
1787
|
[6.45.14]: https://github.com/vtex/node-vtex-api/compare/v6.45.13...v6.45.14
|
|
1784
1788
|
[6.45.13]: https://github.com/vtex/node-vtex-api/compare/v6.45.12...v6.45.13
|
|
1785
1789
|
|
|
1790
|
+
[6.45.21-beta.1]: https://github.com/vtex/node-vtex-api/compare/v6.45.21-beta.0...v6.45.21-beta.1
|
|
1791
|
+
[6.45.21-beta.0]: https://github.com/vtex/node-vtex-api/compare/v6.45.21-beta...v6.45.21-beta.0
|
|
1786
1792
|
[6.45.21-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.20...v6.45.21-beta
|
|
1787
1793
|
[6.45.20]: https://github.com/vtex/node-vtex-api/compare/v6.45.20-beta...v6.45.20
|
|
1788
1794
|
[6.45.20-beta]: https://github.com/vtex/node-vtex-api/compare/v6.45.19...v6.45.20-beta
|
|
@@ -20,6 +20,7 @@ exports.addTracingMiddleware = (tracer) => {
|
|
|
20
20
|
const start = process.hrtime();
|
|
21
21
|
concurrentRequests.inc(1);
|
|
22
22
|
const rootSpan = tracer.extract(opentracing_1.FORMAT_HTTP_HEADERS, ctx.request.headers);
|
|
23
|
+
ctx.tracing = { tracer, currentSpan: undefined };
|
|
23
24
|
if (!shouldTrace(ctx, rootSpan)) {
|
|
24
25
|
await next();
|
|
25
26
|
concurrentRequests.dec(1);
|
|
@@ -86,8 +87,8 @@ exports.addTracingMiddleware = (tracer) => {
|
|
|
86
87
|
};
|
|
87
88
|
exports.nameSpanOperationMiddleware = (operationType, operationName) => {
|
|
88
89
|
return function nameSpanOperation(ctx, next) {
|
|
89
|
-
var _a;
|
|
90
|
-
(_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan.setOperationName(`${operationType}:${operationName}`);
|
|
90
|
+
var _a, _b;
|
|
91
|
+
(_b = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan) === null || _b === void 0 ? void 0 : _b.setOperationName(`${operationType}:${operationName}`);
|
|
91
92
|
return next();
|
|
92
93
|
};
|
|
93
94
|
};
|
|
@@ -101,7 +102,7 @@ exports.traceUserLandRemainingPipelineMiddleware = () => {
|
|
|
101
102
|
userLandTracer.lockFallbackSpan();
|
|
102
103
|
const startTime = process.hrtime();
|
|
103
104
|
try {
|
|
104
|
-
span.log({ event: "user-middlewares-start" /* USER_MIDDLEWARES_START */ });
|
|
105
|
+
span === null || span === void 0 ? void 0 : span.log({ event: "user-middlewares-start" /* USER_MIDDLEWARES_START */ });
|
|
105
106
|
await next();
|
|
106
107
|
}
|
|
107
108
|
catch (err) {
|
|
@@ -109,7 +110,7 @@ exports.traceUserLandRemainingPipelineMiddleware = () => {
|
|
|
109
110
|
throw err;
|
|
110
111
|
}
|
|
111
112
|
finally {
|
|
112
|
-
span.log({
|
|
113
|
+
span === null || span === void 0 ? void 0 : span.log({
|
|
113
114
|
event: "user-middlewares-finish" /* USER_MIDDLEWARES_FINISH */,
|
|
114
115
|
["user-middlewares-duration" /* USER_MIDDLEWARES_DURATION */]: utils_2.hrToMillis(process.hrtime(startTime)),
|
|
115
116
|
});
|
|
@@ -120,8 +121,8 @@ exports.traceUserLandRemainingPipelineMiddleware = () => {
|
|
|
120
121
|
function shouldTrace(ctx, rootSpan) {
|
|
121
122
|
var _a, _b, _c;
|
|
122
123
|
/** Should trace if path isnt blacklisted and sampling decision came from the edge
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
* ((rootSpan as any).isSampled. returns whether or not this span context was sampled
|
|
125
|
+
* There is a cast to bypass opentracing typescript
|
|
126
|
+
*/
|
|
126
127
|
return !PATHS_BLACKLISTED_FOR_TRACING.includes(ctx.request.path) && ((_c = (_b = (_a = rootSpan).isSampled) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false);
|
|
127
128
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.whoAmIHandler = ({ events, routes, }) => (ctx) => {
|
|
4
|
-
var _a;
|
|
5
|
-
(_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan.setOperationName('builtin:whoami');
|
|
4
|
+
var _a, _b;
|
|
5
|
+
(_b = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan) === null || _b === void 0 ? void 0 : _b.setOperationName('builtin:whoami');
|
|
6
6
|
ctx.status = 200;
|
|
7
7
|
ctx.body = {
|
|
8
8
|
events,
|
|
@@ -11,8 +11,8 @@ exports.whoAmIHandler = ({ events, routes, }) => (ctx) => {
|
|
|
11
11
|
ctx.set('Cache-Control', 'public, max-age=86400'); // cache for 24 hours
|
|
12
12
|
};
|
|
13
13
|
exports.healthcheckHandler = ({ events, routes, }) => (ctx) => {
|
|
14
|
-
var _a;
|
|
15
|
-
(_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan.setOperationName('builtin:healthcheck');
|
|
14
|
+
var _a, _b;
|
|
15
|
+
(_b = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan) === null || _b === void 0 ? void 0 : _b.setOperationName('builtin:healthcheck');
|
|
16
16
|
ctx.status = 200;
|
|
17
17
|
ctx.body = {
|
|
18
18
|
events,
|
|
@@ -20,8 +20,8 @@ exports.healthcheckHandler = ({ events, routes, }) => (ctx) => {
|
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
22
|
exports.metricsLoggerHandler = (ctx) => {
|
|
23
|
-
var _a;
|
|
24
|
-
(_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan.setOperationName('builtin:metrics-logger');
|
|
23
|
+
var _a, _b;
|
|
24
|
+
(_b = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan) === null || _b === void 0 ? void 0 : _b.setOperationName('builtin:metrics-logger');
|
|
25
25
|
ctx.status = 200;
|
|
26
26
|
ctx.body = ctx.metricsLogger.getSummaries();
|
|
27
27
|
};
|
|
@@ -10,10 +10,10 @@ const STATUS_TRACK = 'statusTrack';
|
|
|
10
10
|
exports.isStatusTrack = (message) => message === STATUS_TRACK;
|
|
11
11
|
exports.isStatusTrackBroadcast = (message) => message === BROADCAST_STATUS_TRACK;
|
|
12
12
|
exports.statusTrackHandler = async (ctx) => {
|
|
13
|
-
var _a, _b;
|
|
14
|
-
(_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan.setOperationName('builtin:status-track');
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
(_b = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan) === null || _b === void 0 ? void 0 : _b.setOperationName('builtin:status-track');
|
|
15
15
|
if (!constants_1.LINKED) {
|
|
16
|
-
(
|
|
16
|
+
(_c = process.send) === null || _c === void 0 ? void 0 : _c.call(process, BROADCAST_STATUS_TRACK);
|
|
17
17
|
}
|
|
18
18
|
ctx.body = [];
|
|
19
19
|
return;
|
|
@@ -21,7 +21,7 @@ declare type ServerTiming = Record<string, string>;
|
|
|
21
21
|
export declare type Maybe<T> = T | null | undefined;
|
|
22
22
|
export interface TracingContext {
|
|
23
23
|
tracer: Tracer;
|
|
24
|
-
currentSpan: Span;
|
|
24
|
+
currentSpan: Span | undefined;
|
|
25
25
|
}
|
|
26
26
|
export interface Context<T extends IOClients> {
|
|
27
27
|
clients: T;
|
|
@@ -29,7 +29,7 @@ exports.prepareHandlerCtx = (header, tracingContext) => {
|
|
|
29
29
|
segmentToken: header[constants_1.SEGMENT_HEADER],
|
|
30
30
|
sessionToken: header[constants_1.SESSION_HEADER],
|
|
31
31
|
tenant: header[constants_1.TENANT_HEADER] ? tenant_1.parseTenantHeaderValue(header[constants_1.TENANT_HEADER]) : undefined,
|
|
32
|
-
tracer: new UserLandTracer_1.UserLandTracer(tracingContext.tracer, tracingContext.currentSpan),
|
|
32
|
+
tracer: new UserLandTracer_1.UserLandTracer(tracingContext === null || tracingContext === void 0 ? void 0 : tracingContext.tracer, tracingContext === null || tracingContext === void 0 ? void 0 : tracingContext.currentSpan),
|
|
33
33
|
userAgent: process.env.VTEX_APP_ID || '',
|
|
34
34
|
workspace: header[constants_1.WORKSPACE_HEADER],
|
|
35
35
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Span, SpanContext, SpanOptions, Tracer } from 'opentracing';
|
|
2
2
|
export interface IUserLandTracer {
|
|
3
|
-
traceId
|
|
3
|
+
traceId?: string;
|
|
4
4
|
isTraceSampled: boolean;
|
|
5
5
|
startSpan: Tracer['startSpan'];
|
|
6
6
|
inject: Tracer['inject'];
|
|
7
|
-
fallbackSpanContext: () => SpanContext;
|
|
7
|
+
fallbackSpanContext: () => SpanContext | undefined;
|
|
8
8
|
}
|
|
9
9
|
export declare const createTracingContextFromCarrier: (newSpanName: string, carrier: Record<string, any>) => {
|
|
10
10
|
span: Span;
|
|
@@ -15,13 +15,13 @@ export declare class UserLandTracer implements IUserLandTracer {
|
|
|
15
15
|
private fallbackSpan;
|
|
16
16
|
private fallbackSpanLock;
|
|
17
17
|
private _isSampled;
|
|
18
|
-
private _traceId
|
|
19
|
-
constructor(tracer: Tracer, fallbackSpan
|
|
20
|
-
get traceId(): string;
|
|
18
|
+
private _traceId?;
|
|
19
|
+
constructor(tracer: Tracer, fallbackSpan?: Span);
|
|
20
|
+
get traceId(): string | undefined;
|
|
21
21
|
get isTraceSampled(): boolean;
|
|
22
22
|
lockFallbackSpan(): void;
|
|
23
|
-
setFallbackSpan(newSpan
|
|
23
|
+
setFallbackSpan(newSpan?: Span): void;
|
|
24
24
|
startSpan(name: string, options?: SpanOptions): Span;
|
|
25
25
|
inject(spanContext: SpanContext | Span, format: string, carrier: any): void;
|
|
26
|
-
fallbackSpanContext(): SpanContext;
|
|
26
|
+
fallbackSpanContext(): SpanContext | undefined;
|
|
27
27
|
}
|
|
@@ -49,7 +49,8 @@ class UserLandTracer {
|
|
|
49
49
|
return this.tracer.inject(spanContext, format, carrier);
|
|
50
50
|
}
|
|
51
51
|
fallbackSpanContext() {
|
|
52
|
-
|
|
52
|
+
var _a;
|
|
53
|
+
return (_a = this.fallbackSpan) === null || _a === void 0 ? void 0 : _a.context();
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
exports.UserLandTracer = UserLandTracer;
|
|
@@ -26,6 +26,6 @@ export declare class ErrorReport extends ErrorReportBase {
|
|
|
26
26
|
* instance on the provided Span. If a logger is provided and the
|
|
27
27
|
* span is part of a **sampled** trace, then the error will be logged.
|
|
28
28
|
*/
|
|
29
|
-
injectOnSpan(span
|
|
29
|
+
injectOnSpan(span?: Span, logger?: IOContext['logger']): this;
|
|
30
30
|
private shouldLogToSplunk;
|
|
31
31
|
}
|
|
@@ -35,7 +35,7 @@ class ErrorReport extends node_error_report_1.ErrorReportBase {
|
|
|
35
35
|
*/
|
|
36
36
|
injectOnSpan(span, logger) {
|
|
37
37
|
var _a;
|
|
38
|
-
span.setTag(__1.TracingTags.ERROR, 'true');
|
|
38
|
+
span === null || span === void 0 ? void 0 : span.setTag(__1.TracingTags.ERROR, 'true');
|
|
39
39
|
const indexedLogs = {
|
|
40
40
|
["error.kind" /* ERROR_KIND */]: this.kind,
|
|
41
41
|
["error.id" /* ERROR_ID */]: this.metadata.errorId,
|
|
@@ -47,7 +47,7 @@ class ErrorReport extends node_error_report_1.ErrorReportBase {
|
|
|
47
47
|
indexedLogs["error.server.request_id" /* ERROR_SERVER_REQUEST_ID */] = this.parsedInfo.response.data.requestId;
|
|
48
48
|
}
|
|
49
49
|
const serializableError = this.toObject();
|
|
50
|
-
span.log({ event: 'error', ...indexedLogs, error: serializableError });
|
|
50
|
+
span === null || span === void 0 ? void 0 : span.log({ event: 'error', ...indexedLogs, error: serializableError });
|
|
51
51
|
if (logger && this.shouldLogToSplunk(span)) {
|
|
52
52
|
logger.error(serializableError);
|
|
53
53
|
this.markErrorAsReported();
|
package/lib/tracing/utils.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Span } from 'opentracing';
|
|
2
2
|
export interface TraceInfo {
|
|
3
|
-
traceId
|
|
3
|
+
traceId?: string;
|
|
4
4
|
isSampled: boolean;
|
|
5
5
|
}
|
|
6
|
-
export declare function getTraceInfo(span
|
|
6
|
+
export declare function getTraceInfo(span?: Span): TraceInfo;
|
|
7
7
|
/**
|
|
8
8
|
* Do a shallow copy of a headers object and redacts sensitive information.
|
|
9
9
|
*
|
package/lib/tracing/utils.js
CHANGED
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const node_error_report_1 = require("@vtex/node-error-report");
|
|
4
4
|
function getTraceInfo(span) {
|
|
5
5
|
var _a, _b, _c;
|
|
6
|
-
const spanContext = span.context();
|
|
6
|
+
const spanContext = span === null || span === void 0 ? void 0 : span.context();
|
|
7
7
|
return {
|
|
8
|
-
isSampled: (_c = (_b = (_a = spanContext).isSampled) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false,
|
|
9
|
-
traceId: spanContext.toTraceId(),
|
|
8
|
+
isSampled: (_c = (_b = (_a = spanContext) === null || _a === void 0 ? void 0 : _a.isSampled) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false,
|
|
9
|
+
traceId: spanContext === null || spanContext === void 0 ? void 0 : spanContext.toTraceId(),
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
12
|
exports.getTraceInfo = getTraceInfo;
|