@vtex/api 6.48.1-beta.3 → 6.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/gen/manifest.schema +1 -1
- package/lib/HttpClient/GraphQLClient.d.ts +1 -1
- package/lib/HttpClient/HttpClient.d.ts +3 -2
- package/lib/HttpClient/HttpClient.js +14 -14
- package/lib/HttpClient/agents.d.ts +5 -2
- package/lib/HttpClient/agents.js +10 -4
- package/lib/HttpClient/index.js +7 -2
- package/lib/HttpClient/middlewares/cache.d.ts +1 -1
- package/lib/HttpClient/middlewares/cache.js +43 -44
- package/lib/HttpClient/middlewares/cancellationToken.d.ts +1 -1
- package/lib/HttpClient/middlewares/cancellationToken.js +2 -1
- package/lib/HttpClient/middlewares/inflight.d.ts +1 -1
- package/lib/HttpClient/middlewares/inflight.js +6 -3
- package/lib/HttpClient/middlewares/memoization.d.ts +1 -1
- package/lib/HttpClient/middlewares/memoization.js +9 -8
- package/lib/HttpClient/middlewares/metrics.js +8 -11
- package/lib/HttpClient/middlewares/notFound.d.ts +1 -1
- package/lib/HttpClient/middlewares/notFound.js +4 -2
- package/lib/HttpClient/middlewares/recorder.js +2 -5
- package/lib/HttpClient/middlewares/request/HttpAgentSingleton.js +1 -1
- package/lib/HttpClient/middlewares/request/index.d.ts +1 -1
- package/lib/HttpClient/middlewares/request/index.js +13 -10
- package/lib/HttpClient/middlewares/request/setupAxios/index.d.ts +0 -1
- package/lib/HttpClient/middlewares/request/setupAxios/index.js +5 -4
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/exponentialBackoff.js +6 -5
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/index.js +1 -0
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/tracing/index.js +8 -8
- package/lib/HttpClient/middlewares/request/setupAxios/interceptors/tracing/spanSetup.js +10 -8
- package/lib/HttpClient/middlewares/tracing.js +11 -14
- package/lib/HttpClient/typings.d.ts +3 -3
- package/lib/caches/DiskCache.js +3 -3
- package/lib/caches/LRUCache.d.ts +2 -2
- package/lib/caches/LRUDiskCache.d.ts +1 -1
- package/lib/caches/LRUDiskCache.js +3 -3
- package/lib/caches/MultilayeredCache.d.ts +2 -2
- package/lib/caches/MultilayeredCache.js +7 -7
- package/lib/caches/index.js +6 -2
- package/lib/caches/typings.d.ts +5 -5
- package/lib/clients/IOClient.d.ts +1 -1
- package/lib/clients/IOClients.d.ts +1 -1
- package/lib/clients/apps/AppClient.js +1 -1
- package/lib/clients/apps/AppGraphQLClient.js +1 -1
- package/lib/clients/apps/Billing.d.ts +1 -1
- package/lib/clients/apps/Builder.d.ts +7 -7
- package/lib/clients/apps/Builder.js +1 -1
- package/lib/clients/apps/MessagesGraphQL.d.ts +1 -1
- package/lib/clients/apps/MessagesGraphQL.js +3 -3
- package/lib/clients/apps/Settings.js +3 -3
- package/lib/clients/apps/catalogGraphQL/index.d.ts +4 -4
- package/lib/clients/apps/catalogGraphQL/index.js +4 -4
- package/lib/clients/apps/index.js +6 -2
- package/lib/clients/external/ID.d.ts +4 -4
- package/lib/clients/external/PaymentProvider.d.ts +2 -2
- package/lib/clients/external/index.js +6 -2
- package/lib/clients/index.js +6 -2
- package/lib/clients/infra/Apps.d.ts +32 -27
- package/lib/clients/infra/Apps.js +16 -18
- package/lib/clients/infra/Assets.d.ts +6 -5
- package/lib/clients/infra/Assets.js +11 -11
- package/lib/clients/infra/BillingMetrics.d.ts +1 -1
- package/lib/clients/infra/Events.d.ts +1 -1
- package/lib/clients/infra/Events.js +1 -1
- package/lib/clients/infra/Housekeeper.d.ts +3 -3
- package/lib/clients/infra/Registry.d.ts +23 -17
- package/lib/clients/infra/Registry.js +3 -4
- package/lib/clients/infra/Router.d.ts +8 -8
- package/lib/clients/infra/Sphinx.d.ts +2 -2
- package/lib/clients/infra/VBase.d.ts +15 -14
- package/lib/clients/infra/VBase.js +3 -3
- package/lib/clients/infra/Workspaces.d.ts +7 -7
- package/lib/clients/infra/index.js +6 -2
- package/lib/clients/janus/JanusClient.d.ts +1 -1
- package/lib/clients/janus/LicenseManager.js +1 -1
- package/lib/clients/janus/Segment.d.ts +3 -3
- package/lib/clients/janus/Segment.js +2 -2
- package/lib/clients/janus/Session.d.ts +2 -2
- package/lib/clients/janus/Tenant.d.ts +1 -1
- package/lib/clients/janus/index.js +6 -2
- package/lib/constants.d.ts +2 -1
- package/lib/constants.js +3 -2
- package/lib/errors/ResolverError.js +1 -1
- package/lib/errors/index.js +6 -2
- package/lib/index.js +6 -2
- package/lib/metrics/MetricsAccumulator.d.ts +2 -2
- package/lib/metrics/MetricsAccumulator.js +9 -9
- package/lib/responses.d.ts +4 -4
- package/lib/service/index.js +7 -9
- package/lib/service/loaders.js +8 -6
- package/lib/service/logger/client.d.ts +2 -0
- package/lib/service/logger/client.js +48 -0
- package/lib/service/logger/console.d.ts +1 -1
- package/lib/service/logger/console.js +7 -4
- package/lib/service/logger/index.d.ts +2 -0
- package/lib/service/logger/index.js +8 -2
- package/lib/service/logger/logger.d.ts +4 -15
- package/lib/service/logger/logger.js +61 -18
- package/lib/service/logger/loggerTypes.d.ts +14 -0
- package/lib/service/logger/loggerTypes.js +10 -0
- package/lib/service/logger/metricsLogger.js +10 -10
- package/lib/service/master.js +7 -6
- package/lib/service/metrics/requestMetricsMiddleware.js +14 -13
- package/lib/service/telemetry/client.d.ts +3 -0
- package/lib/service/telemetry/client.js +57 -0
- package/lib/service/telemetry/index.d.ts +1 -0
- package/lib/service/telemetry/index.js +17 -0
- package/lib/service/tracing/TracerSingleton.js +9 -9
- package/lib/service/tracing/metrics/MetricNames.js +12 -12
- package/lib/service/tracing/metrics/instruments.js +14 -7
- package/lib/service/tracing/metrics/measurers/EventLoopLagMeasurer.js +5 -5
- package/lib/service/tracing/tracingMiddlewares.js +18 -21
- package/lib/service/worker/index.js +25 -24
- package/lib/service/worker/listeners.js +2 -1
- package/lib/service/worker/runtime/Service.js +1 -1
- package/lib/service/worker/runtime/builtIn/handlers.js +6 -3
- package/lib/service/worker/runtime/builtIn/middlewares.js +5 -3
- package/lib/service/worker/runtime/events/index.d.ts +1 -1
- package/lib/service/worker/runtime/events/index.js +11 -10
- package/lib/service/worker/runtime/events/middlewares/body.js +3 -6
- package/lib/service/worker/runtime/events/middlewares/context.js +1 -1
- package/lib/service/worker/runtime/events/router.js +3 -2
- package/lib/service/worker/runtime/graphql/index.js +8 -7
- package/lib/service/worker/runtime/graphql/middlewares/error.js +5 -8
- package/lib/service/worker/runtime/graphql/middlewares/query.js +7 -6
- package/lib/service/worker/runtime/graphql/middlewares/response.js +1 -1
- package/lib/service/worker/runtime/graphql/middlewares/run.js +3 -2
- package/lib/service/worker/runtime/graphql/middlewares/updateSchema.js +4 -3
- package/lib/service/worker/runtime/graphql/middlewares/upload.js +1 -1
- package/lib/service/worker/runtime/graphql/schema/index.d.ts +1 -1
- package/lib/service/worker/runtime/graphql/schema/index.js +8 -7
- package/lib/service/worker/runtime/graphql/schema/messagesLoaderV2.d.ts +2 -2
- package/lib/service/worker/runtime/graphql/schema/messagesLoaderV2.js +4 -3
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Auth.js +1 -1
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Deprecated.js +1 -1
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/Settings.js +1 -1
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/TranslatableV2.js +2 -2
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/TranslateTo.js +2 -2
- package/lib/service/worker/runtime/graphql/schema/schemaDirectives/index.js +1 -1
- package/lib/service/worker/runtime/graphql/schema/typeDefs/index.js +2 -1
- package/lib/service/worker/runtime/graphql/schema/typeDefs/sanitizedString.js +2 -2
- package/lib/service/worker/runtime/graphql/typings.d.ts +3 -3
- package/lib/service/worker/runtime/graphql/utils/cacheControl.js +2 -1
- package/lib/service/worker/runtime/graphql/utils/error.js +10 -9
- package/lib/service/worker/runtime/graphql/utils/pathname.js +3 -2
- package/lib/service/worker/runtime/graphql/utils/translations.d.ts +1 -1
- package/lib/service/worker/runtime/graphql/utils/translations.js +7 -4
- package/lib/service/worker/runtime/http/index.d.ts +2 -2
- package/lib/service/worker/runtime/http/index.js +22 -20
- package/lib/service/worker/runtime/http/middlewares/context.js +7 -5
- package/lib/service/worker/runtime/http/middlewares/error.js +6 -9
- package/lib/service/worker/runtime/http/middlewares/rateLimit.js +1 -1
- package/lib/service/worker/runtime/http/middlewares/setCookie.js +5 -5
- package/lib/service/worker/runtime/http/middlewares/settings.d.ts +1 -1
- package/lib/service/worker/runtime/http/middlewares/settings.js +13 -9
- package/lib/service/worker/runtime/http/middlewares/timings.js +3 -3
- package/lib/service/worker/runtime/http/router.js +3 -2
- package/lib/service/worker/runtime/http/routes.js +8 -5
- package/lib/service/worker/runtime/method.d.ts +2 -2
- package/lib/service/worker/runtime/method.js +1 -1
- package/lib/service/worker/runtime/statusTrack.d.ts +1 -1
- package/lib/service/worker/runtime/statusTrack.js +10 -5
- package/lib/service/worker/runtime/typings.d.ts +10 -10
- package/lib/service/worker/runtime/utils/compose.d.ts +2 -2
- package/lib/service/worker/runtime/utils/compose.js +4 -2
- package/lib/service/worker/runtime/utils/context.d.ts +2 -2
- package/lib/service/worker/runtime/utils/context.js +5 -4
- package/lib/service/worker/runtime/utils/recorder.js +1 -1
- package/lib/service/worker/runtime/utils/toArray.js +2 -1
- package/lib/tracing/UserLandTracer.js +3 -2
- package/lib/tracing/errorReporting/ErrorReport.js +13 -13
- package/lib/tracing/index.js +1 -1
- package/lib/tracing/utils.js +5 -4
- package/lib/utils/MineWinsConflictsResolver.d.ts +4 -4
- package/lib/utils/MineWinsConflictsResolver.js +10 -10
- package/lib/utils/app.js +39 -23
- package/lib/utils/appsStaleIfError.d.ts +1 -0
- package/lib/utils/appsStaleIfError.js +17 -9
- package/lib/utils/billingOptions.js +2 -1
- package/lib/utils/binding.js +4 -2
- package/lib/utils/domain.js +1 -1
- package/lib/utils/error.js +5 -4
- package/lib/utils/index.js +6 -2
- package/lib/utils/log.js +3 -2
- package/lib/utils/message.js +8 -5
- package/lib/utils/renameBy.js +2 -1
- package/lib/utils/retry.js +8 -6
- package/lib/utils/status.js +2 -1
- package/lib/utils/tenant.js +4 -2
- package/lib/utils/time.d.ts +1 -1
- package/lib/utils/time.js +23 -14
- package/package.json +27 -5
- package/lib/utils/buildFullPath.d.ts +0 -11
- package/lib/utils/buildFullPath.js +0 -54
|
@@ -9,7 +9,7 @@ const Tags_1 = require("../../tracing/Tags");
|
|
|
9
9
|
const utils_1 = require("../../tracing/utils");
|
|
10
10
|
const utils_2 = require("../../utils");
|
|
11
11
|
const PATHS_BLACKLISTED_FOR_TRACING = ['/_status', '/healthcheck'];
|
|
12
|
-
|
|
12
|
+
const addTracingMiddleware = (tracer) => {
|
|
13
13
|
return async function addTracing(ctx, next) {
|
|
14
14
|
var _a;
|
|
15
15
|
const rootSpan = tracer.extract(opentracing_1.FORMAT_HTTP_HEADERS, ctx.request.headers);
|
|
@@ -22,7 +22,7 @@ exports.addTracingMiddleware = (tracer) => {
|
|
|
22
22
|
childOf: rootSpan,
|
|
23
23
|
tags: { [Tags_1.OpentracingTags.SPAN_KIND]: Tags_1.OpentracingTags.SPAN_KIND_RPC_SERVER },
|
|
24
24
|
});
|
|
25
|
-
const initialSamplingDecision = tracing_1.getTraceInfo(currentSpan).isSampled;
|
|
25
|
+
const initialSamplingDecision = (0, tracing_1.getTraceInfo)(currentSpan).isSampled;
|
|
26
26
|
ctx.tracing = { currentSpan, tracer };
|
|
27
27
|
let responseClosed = false;
|
|
28
28
|
ctx.res.once('close', () => (responseClosed = true));
|
|
@@ -30,14 +30,11 @@ exports.addTracingMiddleware = (tracer) => {
|
|
|
30
30
|
await next();
|
|
31
31
|
}
|
|
32
32
|
catch (err) {
|
|
33
|
-
if (!(err instanceof Error)) {
|
|
34
|
-
throw err;
|
|
35
|
-
}
|
|
36
33
|
tracing_1.ErrorReport.create({ originalError: err }).injectOnSpan(currentSpan, (_a = ctx.vtex) === null || _a === void 0 ? void 0 : _a.logger);
|
|
37
34
|
throw err;
|
|
38
35
|
}
|
|
39
36
|
finally {
|
|
40
|
-
const traceInfo = tracing_1.getTraceInfo(currentSpan);
|
|
37
|
+
const traceInfo = (0, tracing_1.getTraceInfo)(currentSpan);
|
|
41
38
|
if (traceInfo === null || traceInfo === void 0 ? void 0 : traceInfo.isSampled) {
|
|
42
39
|
if (!initialSamplingDecision) {
|
|
43
40
|
currentSpan === null || currentSpan === void 0 ? void 0 : currentSpan.setTag(Tags_1.OpentracingTags.SPAN_KIND, Tags_1.OpentracingTags.SPAN_KIND_RPC_SERVER);
|
|
@@ -46,13 +43,13 @@ exports.addTracingMiddleware = (tracer) => {
|
|
|
46
43
|
[Tags_1.OpentracingTags.HTTP_URL]: ctx.request.href,
|
|
47
44
|
[Tags_1.OpentracingTags.HTTP_METHOD]: ctx.request.method,
|
|
48
45
|
[Tags_1.OpentracingTags.HTTP_STATUS_CODE]: ctx.response.status,
|
|
49
|
-
["http.path" /* HTTP_PATH */]: ctx.request.path,
|
|
50
|
-
["vtex.request_id" /* VTEX_REQUEST_ID */]: ctx.get(constants_1.REQUEST_ID_HEADER),
|
|
51
|
-
["vtex.incoming.workspace" /* VTEX_WORKSPACE */]: ctx.get(constants_1.WORKSPACE_HEADER),
|
|
52
|
-
["vtex.incoming.account" /* VTEX_ACCOUNT */]: ctx.get(constants_1.ACCOUNT_HEADER),
|
|
46
|
+
["http.path" /* CustomHttpTags.HTTP_PATH */]: ctx.request.path,
|
|
47
|
+
["vtex.request_id" /* VTEXIncomingRequestTags.VTEX_REQUEST_ID */]: ctx.get(constants_1.REQUEST_ID_HEADER),
|
|
48
|
+
["vtex.incoming.workspace" /* VTEXIncomingRequestTags.VTEX_WORKSPACE */]: ctx.get(constants_1.WORKSPACE_HEADER),
|
|
49
|
+
["vtex.incoming.account" /* VTEXIncomingRequestTags.VTEX_ACCOUNT */]: ctx.get(constants_1.ACCOUNT_HEADER),
|
|
53
50
|
});
|
|
54
|
-
currentSpan === null || currentSpan === void 0 ? void 0 : currentSpan.log(utils_1.cloneAndSanitizeHeaders(ctx.request.headers, 'req.headers.'));
|
|
55
|
-
currentSpan === null || currentSpan === void 0 ? void 0 : currentSpan.log(utils_1.cloneAndSanitizeHeaders(ctx.response.headers, 'res.headers.'));
|
|
51
|
+
currentSpan === null || currentSpan === void 0 ? void 0 : currentSpan.log((0, utils_1.cloneAndSanitizeHeaders)(ctx.request.headers, 'req.headers.'));
|
|
52
|
+
currentSpan === null || currentSpan === void 0 ? void 0 : currentSpan.log((0, utils_1.cloneAndSanitizeHeaders)(ctx.response.headers, 'res.headers.'));
|
|
56
53
|
ctx.set(constants_1.TRACE_ID_HEADER, traceInfo.traceId);
|
|
57
54
|
}
|
|
58
55
|
const onResFinished = () => {
|
|
@@ -62,12 +59,13 @@ exports.addTracingMiddleware = (tracer) => {
|
|
|
62
59
|
onResFinished();
|
|
63
60
|
}
|
|
64
61
|
else {
|
|
65
|
-
stream_1.finished(ctx.res, onResFinished);
|
|
62
|
+
(0, stream_1.finished)(ctx.res, onResFinished);
|
|
66
63
|
}
|
|
67
64
|
}
|
|
68
65
|
};
|
|
69
66
|
};
|
|
70
|
-
exports.
|
|
67
|
+
exports.addTracingMiddleware = addTracingMiddleware;
|
|
68
|
+
const nameSpanOperationMiddleware = (operationType, operationName) => {
|
|
71
69
|
return function nameSpanOperation(ctx, next) {
|
|
72
70
|
var _a, _b;
|
|
73
71
|
ctx.requestHandlerName = `${operationType}:${operationName}`;
|
|
@@ -75,7 +73,8 @@ exports.nameSpanOperationMiddleware = (operationType, operationName) => {
|
|
|
75
73
|
return next();
|
|
76
74
|
};
|
|
77
75
|
};
|
|
78
|
-
exports.
|
|
76
|
+
exports.nameSpanOperationMiddleware = nameSpanOperationMiddleware;
|
|
77
|
+
const traceUserLandRemainingPipelineMiddleware = () => {
|
|
79
78
|
return async function traceUserLandRemainingPipeline(ctx, next) {
|
|
80
79
|
const tracingCtx = ctx.tracing;
|
|
81
80
|
ctx.tracing = undefined;
|
|
@@ -85,25 +84,23 @@ exports.traceUserLandRemainingPipelineMiddleware = () => {
|
|
|
85
84
|
userLandTracer.lockFallbackSpan();
|
|
86
85
|
const startTime = process.hrtime();
|
|
87
86
|
try {
|
|
88
|
-
span === null || span === void 0 ? void 0 : span.log({ event: "user-middlewares-start" /* USER_MIDDLEWARES_START */ });
|
|
87
|
+
span === null || span === void 0 ? void 0 : span.log({ event: "user-middlewares-start" /* RuntimeLogEvents.USER_MIDDLEWARES_START */ });
|
|
89
88
|
await next();
|
|
90
89
|
}
|
|
91
90
|
catch (err) {
|
|
92
|
-
if (!(err instanceof Error)) {
|
|
93
|
-
throw err;
|
|
94
|
-
}
|
|
95
91
|
tracing_1.ErrorReport.create({ originalError: err }).injectOnSpan(span, ctx.vtex.logger);
|
|
96
92
|
throw err;
|
|
97
93
|
}
|
|
98
94
|
finally {
|
|
99
95
|
span === null || span === void 0 ? void 0 : span.log({
|
|
100
|
-
event: "user-middlewares-finish" /* USER_MIDDLEWARES_FINISH */,
|
|
101
|
-
["user-middlewares-duration" /* USER_MIDDLEWARES_DURATION */]: utils_2.hrToMillis(process.hrtime(startTime)),
|
|
96
|
+
event: "user-middlewares-finish" /* RuntimeLogEvents.USER_MIDDLEWARES_FINISH */,
|
|
97
|
+
["user-middlewares-duration" /* RuntimeLogFields.USER_MIDDLEWARES_DURATION */]: (0, utils_2.hrToMillis)(process.hrtime(startTime)),
|
|
102
98
|
});
|
|
103
99
|
ctx.tracing = tracingCtx;
|
|
104
100
|
}
|
|
105
101
|
};
|
|
106
102
|
};
|
|
103
|
+
exports.traceUserLandRemainingPipelineMiddleware = traceUserLandRemainingPipelineMiddleware;
|
|
107
104
|
function shouldTrace(ctx, rootSpan) {
|
|
108
105
|
var _a, _b, _c;
|
|
109
106
|
/** Should trace if path isnt blacklisted and sampling decision came from the edge
|
|
@@ -13,7 +13,7 @@ const constants_1 = require("../../constants");
|
|
|
13
13
|
const MetricsAccumulator_1 = require("../../metrics/MetricsAccumulator");
|
|
14
14
|
const loaders_1 = require("../loaders");
|
|
15
15
|
const console_1 = require("../logger/console");
|
|
16
|
-
const
|
|
16
|
+
const loggerTypes_1 = require("../logger/loggerTypes");
|
|
17
17
|
const requestMetricsMiddleware_1 = require("../metrics/requestMetricsMiddleware");
|
|
18
18
|
const TracerSingleton_1 = require("../tracing/TracerSingleton");
|
|
19
19
|
const tracingMiddlewares_1 = require("../tracing/tracingMiddlewares");
|
|
@@ -41,7 +41,7 @@ const upSignal = () => {
|
|
|
41
41
|
path: '/_up',
|
|
42
42
|
port: 5000,
|
|
43
43
|
};
|
|
44
|
-
const req = http_1.request(options);
|
|
44
|
+
const req = (0, http_1.request)(options);
|
|
45
45
|
req.write(data);
|
|
46
46
|
req.end();
|
|
47
47
|
};
|
|
@@ -49,10 +49,10 @@ const isUpSignal = (message) => message === constants_1.UP_SIGNAL;
|
|
|
49
49
|
const onMessage = (service) => (message) => {
|
|
50
50
|
if (isUpSignal(message)) {
|
|
51
51
|
upSignal();
|
|
52
|
-
routes_1.logAvailableRoutes(service);
|
|
52
|
+
(0, routes_1.logAvailableRoutes)(service);
|
|
53
53
|
}
|
|
54
|
-
else if (statusTrack_1.isStatusTrack(message)) {
|
|
55
|
-
statusTrack_1.trackStatus();
|
|
54
|
+
else if ((0, statusTrack_1.isStatusTrack)(message)) {
|
|
55
|
+
(0, statusTrack_1.trackStatus)();
|
|
56
56
|
}
|
|
57
57
|
else {
|
|
58
58
|
listeners_1.logger.warn({
|
|
@@ -73,13 +73,13 @@ const createAppHttpHandlers = ({ config: { routes, clients } }, serviceJSON, glo
|
|
|
73
73
|
const { path: servicePath, public: publicRoute = false, extensible = false, } = serviceRoute;
|
|
74
74
|
if (publicRoute || extensible) {
|
|
75
75
|
acc.pub[routeId] = {
|
|
76
|
-
handler: http_2.createPublicHttpRoute(clients, routes[routeId], serviceRoute, routeId, globalLimiter),
|
|
76
|
+
handler: (0, http_2.createPublicHttpRoute)(clients, routes[routeId], serviceRoute, routeId, globalLimiter),
|
|
77
77
|
path: servicePath,
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
else {
|
|
81
81
|
acc.pvt[routeId] = {
|
|
82
|
-
handler: http_2.createPrivateHttpRoute(clients, routes[routeId], serviceRoute, routeId, globalLimiter),
|
|
82
|
+
handler: (0, http_2.createPrivateHttpRoute)(clients, routes[routeId], serviceRoute, routeId, globalLimiter),
|
|
83
83
|
path: `/:account/:workspace${servicePath.replace(/\*([^/]*)/g, ':$1*')}`,
|
|
84
84
|
};
|
|
85
85
|
}
|
|
@@ -98,7 +98,7 @@ const createAppGraphQLHandler = ({ config: { graphql, clients } }, { routes }, g
|
|
|
98
98
|
return {
|
|
99
99
|
pvt: {
|
|
100
100
|
[graphql_1.GRAPHQL_ROUTE]: {
|
|
101
|
-
handler: graphql_1.createGraphQLRoute(graphql, clients, route, graphql_1.GRAPHQL_ROUTE, globalLimiter),
|
|
101
|
+
handler: (0, graphql_1.createGraphQLRoute)(graphql, clients, route, graphql_1.GRAPHQL_ROUTE, globalLimiter),
|
|
102
102
|
path: `/:account/:workspace${route.path}`,
|
|
103
103
|
},
|
|
104
104
|
},
|
|
@@ -111,7 +111,7 @@ const createAppEventHandlers = ({ config: { events, clients } }, serviceJSON, gl
|
|
|
111
111
|
return Object.keys(events).reduce((acc, eventId) => {
|
|
112
112
|
var _a;
|
|
113
113
|
const serviceEvent = (_a = serviceJSON.events) === null || _a === void 0 ? void 0 : _a[eventId];
|
|
114
|
-
acc[eventId] = events_1.createEventHandler(clients, eventId, events[eventId], serviceEvent, globalLimiter);
|
|
114
|
+
acc[eventId] = (0, events_1.createEventHandler)(clients, eventId, events[eventId], serviceEvent, globalLimiter);
|
|
115
115
|
return acc;
|
|
116
116
|
}, {});
|
|
117
117
|
}
|
|
@@ -120,11 +120,11 @@ const createAppEventHandlers = ({ config: { events, clients } }, serviceJSON, gl
|
|
|
120
120
|
const createRuntimeHttpHandlers = (appEventHandlers, serviceJSON) => ({
|
|
121
121
|
pvt: {
|
|
122
122
|
__events: {
|
|
123
|
-
handler: router_1.routerFromEventHandlers(appEventHandlers),
|
|
123
|
+
handler: (0, router_1.routerFromEventHandlers)(appEventHandlers),
|
|
124
124
|
path: '/:account/:workspace/_events',
|
|
125
125
|
},
|
|
126
126
|
__healthCheck: {
|
|
127
|
-
handler: handlers_1.healthcheckHandler(serviceJSON),
|
|
127
|
+
handler: (0, handlers_1.healthcheckHandler)(serviceJSON),
|
|
128
128
|
path: '/healthcheck',
|
|
129
129
|
},
|
|
130
130
|
__metricsLogger: {
|
|
@@ -136,7 +136,7 @@ const createRuntimeHttpHandlers = (appEventHandlers, serviceJSON) => ({
|
|
|
136
136
|
path: '/_status',
|
|
137
137
|
},
|
|
138
138
|
__whoami: {
|
|
139
|
-
handler: handlers_1.whoAmIHandler(serviceJSON),
|
|
139
|
+
handler: (0, handlers_1.whoAmIHandler)(serviceJSON),
|
|
140
140
|
path: '/:account/:workspace/_whoami',
|
|
141
141
|
},
|
|
142
142
|
},
|
|
@@ -146,30 +146,30 @@ const scaleClientCaches = (scaleFactor, options) => Object.entries(options || {}
|
|
|
146
146
|
const previous = opts.memoryCache.storage.max;
|
|
147
147
|
const current = previous / scaleFactor;
|
|
148
148
|
opts.memoryCache.storage.max = current;
|
|
149
|
-
console_1.logOnceToDevConsole(`Scaling ${name} cache capacity from ${previous} to ${current}`,
|
|
149
|
+
(0, console_1.logOnceToDevConsole)(`Scaling ${name} cache capacity from ${previous} to ${current}`, loggerTypes_1.LogLevel.Warn);
|
|
150
150
|
}
|
|
151
151
|
});
|
|
152
|
-
|
|
152
|
+
const startWorker = (serviceJSON) => {
|
|
153
153
|
var _a, _b;
|
|
154
|
-
listeners_1.addProcessListeners();
|
|
154
|
+
(0, listeners_1.addProcessListeners)();
|
|
155
155
|
const tracer = TracerSingleton_1.TracerSingleton.getTracer();
|
|
156
156
|
const app = new koa_1.default();
|
|
157
157
|
app.proxy = true;
|
|
158
158
|
app
|
|
159
159
|
.use(error_1.error)
|
|
160
|
-
.use(middlewares_1.prometheusLoggerMiddleware())
|
|
161
|
-
.use(tracingMiddlewares_1.addTracingMiddleware(tracer))
|
|
162
|
-
.use(requestMetricsMiddleware_1.addRequestMetricsMiddleware())
|
|
163
|
-
.use(middlewares_1.addMetricsLoggerMiddleware())
|
|
164
|
-
.use(rateLimit_1.concurrentRateLimiter((_a = serviceJSON === null || serviceJSON === void 0 ? void 0 : serviceJSON.rateLimitPerReplica) === null || _a === void 0 ? void 0 : _a.concurrent))
|
|
165
|
-
.use(koa_compress_1.default())
|
|
160
|
+
.use((0, middlewares_1.prometheusLoggerMiddleware)())
|
|
161
|
+
.use((0, tracingMiddlewares_1.addTracingMiddleware)(tracer))
|
|
162
|
+
.use((0, requestMetricsMiddleware_1.addRequestMetricsMiddleware)())
|
|
163
|
+
.use((0, middlewares_1.addMetricsLoggerMiddleware)())
|
|
164
|
+
.use((0, rateLimit_1.concurrentRateLimiter)((_a = serviceJSON === null || serviceJSON === void 0 ? void 0 : serviceJSON.rateLimitPerReplica) === null || _a === void 0 ? void 0 : _a.concurrent))
|
|
165
|
+
.use((0, koa_compress_1.default)())
|
|
166
166
|
.use(middlewares_1.recorderMiddleware);
|
|
167
|
-
const service = loaders_1.getService();
|
|
167
|
+
const service = (0, loaders_1.getService)();
|
|
168
168
|
const { config: { clients } } = service;
|
|
169
169
|
if (clients) {
|
|
170
170
|
scaleClientCaches(serviceJSON.workers, clients.options);
|
|
171
171
|
}
|
|
172
|
-
const globalLimiter = tokenBucket_1.createTokenBucket((_b = serviceJSON === null || serviceJSON === void 0 ? void 0 : serviceJSON.rateLimitPerReplica) === null || _b === void 0 ? void 0 : _b.perMinute);
|
|
172
|
+
const globalLimiter = (0, tokenBucket_1.createTokenBucket)((_b = serviceJSON === null || serviceJSON === void 0 ? void 0 : serviceJSON.rateLimitPerReplica) === null || _b === void 0 ? void 0 : _b.perMinute);
|
|
173
173
|
const appHttpHandlers = createAppHttpHandlers(service, serviceJSON, globalLimiter);
|
|
174
174
|
const appEventHandlers = createAppEventHandlers(service, serviceJSON, globalLimiter);
|
|
175
175
|
const appGraphQLHandlers = createAppGraphQLHandler(service, serviceJSON, globalLimiter);
|
|
@@ -183,7 +183,7 @@ exports.startWorker = (serviceJSON) => {
|
|
|
183
183
|
// TODO: Fix ramda typings. Apparently there was an update that broke things
|
|
184
184
|
.reduce(ramda_1.mergeDeepRight);
|
|
185
185
|
if (httpHandlers === null || httpHandlers === void 0 ? void 0 : httpHandlers.pub) {
|
|
186
|
-
const publicHandlersRouter = router_2.routerFromPublicHttpHandlers(httpHandlers.pub);
|
|
186
|
+
const publicHandlersRouter = (0, router_2.routerFromPublicHttpHandlers)(httpHandlers.pub);
|
|
187
187
|
app.use(publicHandlersRouter);
|
|
188
188
|
}
|
|
189
189
|
if (httpHandlers === null || httpHandlers === void 0 ? void 0 : httpHandlers.pvt) {
|
|
@@ -193,4 +193,5 @@ exports.startWorker = (serviceJSON) => {
|
|
|
193
193
|
process.on('message', onMessage(serviceJSON));
|
|
194
194
|
return app;
|
|
195
195
|
};
|
|
196
|
+
exports.startWorker = startWorker;
|
|
196
197
|
global.metrics = new MetricsAccumulator_1.MetricsAccumulator();
|
|
@@ -9,7 +9,7 @@ let watched;
|
|
|
9
9
|
const handleSignal = signal => {
|
|
10
10
|
process.exit(os_1.constants.signals[signal]);
|
|
11
11
|
};
|
|
12
|
-
|
|
12
|
+
const addProcessListeners = () => {
|
|
13
13
|
// Listeners already set up
|
|
14
14
|
if (watched) {
|
|
15
15
|
return;
|
|
@@ -38,3 +38,4 @@ exports.addProcessListeners = () => {
|
|
|
38
38
|
process.on('SIGINT', handleSignal);
|
|
39
39
|
process.on('SIGTERM', handleSignal);
|
|
40
40
|
};
|
|
41
|
+
exports.addProcessListeners = addProcessListeners;
|
|
@@ -17,7 +17,7 @@ class Service {
|
|
|
17
17
|
constructor(config) {
|
|
18
18
|
this.config = config;
|
|
19
19
|
if (config.routes && config.routes.graphql) {
|
|
20
|
-
logger_1.logOnceToDevConsole(`Route id "graphql" is reserved and apps containing this routes will stop working in the near future. To create a GraphQL app, export a "graphql" key with {resolvers}.`, logger_1.LogLevel.Warn);
|
|
20
|
+
(0, logger_1.logOnceToDevConsole)(`Route id "graphql" is reserved and apps containing this routes will stop working in the near future. To create a GraphQL app, export a "graphql" key with {resolvers}.`, logger_1.LogLevel.Warn);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.metricsLoggerHandler = exports.healthcheckHandler = exports.whoAmIHandler = void 0;
|
|
4
|
-
|
|
4
|
+
const whoAmIHandler = ({ events, routes, }) => (ctx) => {
|
|
5
5
|
var _a, _b;
|
|
6
6
|
ctx.requestHandlerName = 'builtin:whoami';
|
|
7
7
|
(_b = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan) === null || _b === void 0 ? void 0 : _b.setOperationName(ctx.requestHandlerName);
|
|
@@ -12,7 +12,8 @@ exports.whoAmIHandler = ({ events, routes, }) => (ctx) => {
|
|
|
12
12
|
};
|
|
13
13
|
ctx.set('Cache-Control', 'public, max-age=86400'); // cache for 24 hours
|
|
14
14
|
};
|
|
15
|
-
exports.
|
|
15
|
+
exports.whoAmIHandler = whoAmIHandler;
|
|
16
|
+
const healthcheckHandler = ({ events, routes, }) => (ctx) => {
|
|
16
17
|
var _a, _b;
|
|
17
18
|
ctx.requestHandlerName = 'builtin:healthcheck';
|
|
18
19
|
(_b = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan) === null || _b === void 0 ? void 0 : _b.setOperationName(ctx.requestHandlerName);
|
|
@@ -22,10 +23,12 @@ exports.healthcheckHandler = ({ events, routes, }) => (ctx) => {
|
|
|
22
23
|
routes,
|
|
23
24
|
};
|
|
24
25
|
};
|
|
25
|
-
exports.
|
|
26
|
+
exports.healthcheckHandler = healthcheckHandler;
|
|
27
|
+
const metricsLoggerHandler = (ctx) => {
|
|
26
28
|
var _a, _b;
|
|
27
29
|
ctx.requestHandlerName = 'builtin:metrics-logger';
|
|
28
30
|
(_b = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan) === null || _b === void 0 ? void 0 : _b.setOperationName(ctx.requestHandlerName);
|
|
29
31
|
ctx.status = 200;
|
|
30
32
|
ctx.body = ctx.metricsLogger.getSummaries();
|
|
31
33
|
};
|
|
34
|
+
exports.metricsLoggerHandler = metricsLoggerHandler;
|
|
@@ -14,15 +14,16 @@ async function recorderMiddleware(ctx, next) {
|
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
16
|
exports.recorderMiddleware = recorderMiddleware;
|
|
17
|
-
|
|
17
|
+
const addMetricsLoggerMiddleware = () => {
|
|
18
18
|
const metricsLogger = new metricsLogger_1.MetricsLogger();
|
|
19
19
|
return (ctx, next) => {
|
|
20
20
|
ctx.metricsLogger = metricsLogger;
|
|
21
21
|
return next();
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
|
-
exports.
|
|
25
|
-
|
|
24
|
+
exports.addMetricsLoggerMiddleware = addMetricsLoggerMiddleware;
|
|
25
|
+
const prometheusLoggerMiddleware = () => {
|
|
26
|
+
(0, prom_client_1.collectDefaultMetrics)();
|
|
26
27
|
const eventLoopLagMeasurer = new EventLoopLagMeasurer_1.EventLoopLagMeasurer();
|
|
27
28
|
eventLoopLagMeasurer.start();
|
|
28
29
|
return async (ctx, next) => {
|
|
@@ -39,3 +40,4 @@ exports.prometheusLoggerMiddleware = () => {
|
|
|
39
40
|
ctx.status = 200;
|
|
40
41
|
};
|
|
41
42
|
};
|
|
43
|
+
exports.prometheusLoggerMiddleware = prometheusLoggerMiddleware;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import TokenBucket from 'tokenbucket';
|
|
2
2
|
import { IOClients } from '../../../../clients/IOClients';
|
|
3
3
|
import { ClientsConfig, EventHandler, ParamsContext, RecorderState, ServiceContext, ServiceEvent } from '../typings';
|
|
4
|
-
export declare const createEventHandler: <T extends IOClients, U extends RecorderState, V extends ParamsContext>(clientsConfig: ClientsConfig<T>, eventId: string, handler:
|
|
4
|
+
export declare const createEventHandler: <T extends IOClients, U extends RecorderState, V extends ParamsContext>(clientsConfig: ClientsConfig<T>, eventId: string, handler: EventHandler<T, U> | EventHandler<T, U>[], serviceEvent: ServiceEvent | undefined, globalLimiter: TokenBucket | undefined) => import("koa-compose").ComposedMiddleware<ServiceContext<T, U, V>>;
|
|
@@ -10,24 +10,25 @@ const compose_1 = require("../utils/compose");
|
|
|
10
10
|
const toArray_1 = require("../utils/toArray");
|
|
11
11
|
const body_1 = require("./middlewares/body");
|
|
12
12
|
const context_1 = require("./middlewares/context");
|
|
13
|
-
|
|
13
|
+
const createEventHandler = (clientsConfig, eventId, handler, serviceEvent, globalLimiter) => {
|
|
14
14
|
var _a, _b;
|
|
15
15
|
const { implementation, options } = clientsConfig;
|
|
16
|
-
const middlewares = toArray_1.toArray(handler);
|
|
16
|
+
const middlewares = (0, toArray_1.toArray)(handler);
|
|
17
17
|
const pipeline = [
|
|
18
|
-
tracingMiddlewares_1.nameSpanOperationMiddleware('event-handler', eventId),
|
|
18
|
+
(0, tracingMiddlewares_1.nameSpanOperationMiddleware)('event-handler', eventId),
|
|
19
19
|
context_1.eventContextMiddleware,
|
|
20
20
|
body_1.parseBodyMiddleware,
|
|
21
|
-
clients_1.clients(implementation, options),
|
|
22
|
-
...((serviceEvent === null || serviceEvent === void 0 ? void 0 : serviceEvent.settingsType) === 'workspace' || (serviceEvent === null || serviceEvent === void 0 ? void 0 : serviceEvent.settingsType) === 'userAndWorkspace' ? [settings_1.getServiceSettings()] : []),
|
|
21
|
+
(0, clients_1.clients)(implementation, options),
|
|
22
|
+
...((serviceEvent === null || serviceEvent === void 0 ? void 0 : serviceEvent.settingsType) === 'workspace' || (serviceEvent === null || serviceEvent === void 0 ? void 0 : serviceEvent.settingsType) === 'userAndWorkspace' ? [(0, settings_1.getServiceSettings)()] : []),
|
|
23
23
|
timings_1.timings,
|
|
24
|
-
rateLimit_1.concurrentRateLimiter((_a = serviceEvent === null || serviceEvent === void 0 ? void 0 : serviceEvent.rateLimitPerReplica) === null || _a === void 0 ? void 0 : _a.concurrent),
|
|
25
|
-
rateLimit_1.perMinuteRateLimiter((_b = serviceEvent === null || serviceEvent === void 0 ? void 0 : serviceEvent.rateLimitPerReplica) === null || _b === void 0 ? void 0 : _b.perMinute, globalLimiter),
|
|
26
|
-
tracingMiddlewares_1.traceUserLandRemainingPipelineMiddleware(),
|
|
24
|
+
(0, rateLimit_1.concurrentRateLimiter)((_a = serviceEvent === null || serviceEvent === void 0 ? void 0 : serviceEvent.rateLimitPerReplica) === null || _a === void 0 ? void 0 : _a.concurrent),
|
|
25
|
+
(0, rateLimit_1.perMinuteRateLimiter)((_b = serviceEvent === null || serviceEvent === void 0 ? void 0 : serviceEvent.rateLimitPerReplica) === null || _b === void 0 ? void 0 : _b.perMinute, globalLimiter),
|
|
26
|
+
(0, tracingMiddlewares_1.traceUserLandRemainingPipelineMiddleware)(),
|
|
27
27
|
contextAdapter(middlewares),
|
|
28
28
|
];
|
|
29
|
-
return compose_1.compose(pipeline);
|
|
29
|
+
return (0, compose_1.compose)(pipeline);
|
|
30
30
|
};
|
|
31
|
+
exports.createEventHandler = createEventHandler;
|
|
31
32
|
function contextAdapter(middlewares) {
|
|
32
33
|
return async function middlewareCascade(ctx) {
|
|
33
34
|
const ctxEvent = {
|
|
@@ -41,7 +42,7 @@ function contextAdapter(middlewares) {
|
|
|
41
42
|
timings: ctx.timings,
|
|
42
43
|
vtex: ctx.vtex,
|
|
43
44
|
};
|
|
44
|
-
await compose_1.composeForEvents(middlewares)(ctxEvent);
|
|
45
|
+
await (0, compose_1.composeForEvents)(middlewares)(ctxEvent);
|
|
45
46
|
ctx.status = 204;
|
|
46
47
|
};
|
|
47
48
|
}
|
|
@@ -6,19 +6,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.parseBodyMiddleware = void 0;
|
|
7
7
|
const co_body_1 = __importDefault(require("co-body"));
|
|
8
8
|
const logger_1 = require("../../../../logger");
|
|
9
|
-
const console_1 = require("
|
|
9
|
+
const console_1 = require("../../../../logger/console");
|
|
10
10
|
async function parseBodyMiddleware(ctx, next) {
|
|
11
11
|
try {
|
|
12
|
-
ctx.state.body = await co_body_1.default(ctx.req);
|
|
12
|
+
ctx.state.body = await (0, co_body_1.default)(ctx.req);
|
|
13
13
|
}
|
|
14
14
|
catch (err) {
|
|
15
|
-
if (!(err instanceof Error)) {
|
|
16
|
-
throw err;
|
|
17
|
-
}
|
|
18
15
|
const msg = `Error parsing event body: ${err.message || err}`;
|
|
19
16
|
ctx.status = 500;
|
|
20
17
|
ctx.body = msg;
|
|
21
|
-
console_1.logOnceToDevConsole(msg, logger_1.LogLevel.Error);
|
|
18
|
+
(0, console_1.logOnceToDevConsole)(msg, logger_1.LogLevel.Error);
|
|
22
19
|
return;
|
|
23
20
|
}
|
|
24
21
|
await next();
|
|
@@ -6,7 +6,7 @@ const context_1 = require("../../utils/context");
|
|
|
6
6
|
async function eventContextMiddleware(ctx, next) {
|
|
7
7
|
const { request: { header } } = ctx;
|
|
8
8
|
ctx.vtex = {
|
|
9
|
-
...context_1.prepareHandlerCtx(header, ctx.tracing),
|
|
9
|
+
...(0, context_1.prepareHandlerCtx)(header, ctx.tracing),
|
|
10
10
|
eventInfo: {
|
|
11
11
|
key: header[constants_1.EVENT_KEY_HEADER],
|
|
12
12
|
sender: header[constants_1.EVENT_SENDER_HEADER],
|
|
@@ -4,7 +4,7 @@ exports.routerFromEventHandlers = void 0;
|
|
|
4
4
|
const constants_1 = require("../../../../constants");
|
|
5
5
|
const logger_1 = require("../../../logger");
|
|
6
6
|
const console_1 = require("./../../../logger/console");
|
|
7
|
-
|
|
7
|
+
const routerFromEventHandlers = (events) => {
|
|
8
8
|
return async (ctx, next) => {
|
|
9
9
|
const handlerId = ctx.get(constants_1.EVENT_HANDLER_ID_HEADER);
|
|
10
10
|
if (!handlerId || !events) {
|
|
@@ -20,9 +20,10 @@ exports.routerFromEventHandlers = (events) => {
|
|
|
20
20
|
const msg = `Event handler not found for ${handlerId}`;
|
|
21
21
|
ctx.response.status = 404;
|
|
22
22
|
ctx.response.body = msg;
|
|
23
|
-
console_1.logOnceToDevConsole(msg, logger_1.LogLevel.Error);
|
|
23
|
+
(0, console_1.logOnceToDevConsole)(msg, logger_1.LogLevel.Error);
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
await handler(ctx, next);
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
|
+
exports.routerFromEventHandlers = routerFromEventHandlers;
|
|
@@ -12,17 +12,18 @@ const updateSchema_1 = require("./middlewares/updateSchema");
|
|
|
12
12
|
const upload_1 = require("./middlewares/upload");
|
|
13
13
|
const schema_1 = require("./schema");
|
|
14
14
|
exports.GRAPHQL_ROUTE = '__graphql';
|
|
15
|
-
|
|
16
|
-
const executableSchema = schema_1.makeSchema(graphql);
|
|
15
|
+
const createGraphQLRoute = (graphql, clientsConfig, serviceRoute, routeId, globalLimiter) => {
|
|
16
|
+
const executableSchema = (0, schema_1.makeSchema)(graphql);
|
|
17
17
|
const pipeline = [
|
|
18
|
-
tracingMiddlewares_1.nameSpanOperationMiddleware('graphql-handler', exports.GRAPHQL_ROUTE),
|
|
19
|
-
updateSchema_1.updateSchema(graphql, executableSchema),
|
|
18
|
+
(0, tracingMiddlewares_1.nameSpanOperationMiddleware)('graphql-handler', exports.GRAPHQL_ROUTE),
|
|
19
|
+
(0, updateSchema_1.updateSchema)(graphql, executableSchema),
|
|
20
20
|
context_1.injectGraphqlContext,
|
|
21
21
|
response_1.response,
|
|
22
22
|
error_1.graphqlError,
|
|
23
23
|
upload_1.upload,
|
|
24
|
-
query_1.extractQuery(executableSchema),
|
|
25
|
-
run_1.run(executableSchema),
|
|
24
|
+
(0, query_1.extractQuery)(executableSchema),
|
|
25
|
+
(0, run_1.run)(executableSchema),
|
|
26
26
|
];
|
|
27
|
-
return http_1.createPrivateHttpRoute(clientsConfig, pipeline, serviceRoute, routeId, globalLimiter);
|
|
27
|
+
return (0, http_1.createPrivateHttpRoute)(clientsConfig, pipeline, serviceRoute, routeId, globalLimiter);
|
|
28
28
|
};
|
|
29
|
+
exports.createGraphQLRoute = createGraphQLRoute;
|
|
@@ -9,7 +9,7 @@ const logger_1 = require("../../../../logger");
|
|
|
9
9
|
const error_1 = require("../utils/error");
|
|
10
10
|
const pathname_1 = require("../utils/pathname");
|
|
11
11
|
const TWO_SECONDS_S = 2;
|
|
12
|
-
const uniqErrorsByPath = (errors) => ramda_1.uniqBy(e => e.extensions && e.extensions.exception && e.extensions.exception.request
|
|
12
|
+
const uniqErrorsByPath = (errors) => (0, ramda_1.uniqBy)(e => e.extensions && e.extensions.exception && e.extensions.exception.request
|
|
13
13
|
? e.extensions.exception.request.path
|
|
14
14
|
: e, errors);
|
|
15
15
|
const createLogErrorToSplunk = (vtex) => (err) => {
|
|
@@ -22,7 +22,7 @@ const createLogErrorToSplunk = (vtex) => (err) => {
|
|
|
22
22
|
}
|
|
23
23
|
// Add pathName to each error
|
|
24
24
|
if (err.path) {
|
|
25
|
-
err.pathName = pathname_1.generatePathName(err.path);
|
|
25
|
+
err.pathName = (0, pathname_1.generatePathName)(err.path);
|
|
26
26
|
}
|
|
27
27
|
const log = {
|
|
28
28
|
...err,
|
|
@@ -48,19 +48,16 @@ async function graphqlError(ctx, next) {
|
|
|
48
48
|
await next();
|
|
49
49
|
const response = ctx.graphql.graphqlResponse;
|
|
50
50
|
if (response && Array.isArray(response.errors)) {
|
|
51
|
-
const formatter = error_1.createFormatError(ctx);
|
|
52
|
-
graphQLErrors = apollo_server_errors_1.formatApolloErrors(response.errors, { formatter });
|
|
51
|
+
const formatter = (0, error_1.createFormatError)(ctx);
|
|
52
|
+
graphQLErrors = (0, apollo_server_errors_1.formatApolloErrors)(response.errors, { formatter });
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
catch (e) {
|
|
56
|
-
if (!(e instanceof apollo_server_errors_1.ApolloError)) {
|
|
57
|
-
throw e;
|
|
58
|
-
}
|
|
59
56
|
if (e.code === RequestCancelledError_1.cancelledErrorCode) {
|
|
60
57
|
ctx.status = RequestCancelledError_1.cancelledRequestStatus;
|
|
61
58
|
return;
|
|
62
59
|
}
|
|
63
|
-
const formatError = error_1.createFormatError(ctx);
|
|
60
|
+
const formatError = (0, error_1.createFormatError)(ctx);
|
|
64
61
|
graphQLErrors = Array.isArray(e)
|
|
65
62
|
? e.map(formatError)
|
|
66
63
|
: [formatError(e)];
|
|
@@ -10,7 +10,7 @@ const documentStorage = new LRUCache_1.LRUCache({
|
|
|
10
10
|
max: 500,
|
|
11
11
|
});
|
|
12
12
|
const queryFromUrl = (url) => {
|
|
13
|
-
const parsedUrl = url_1.parse(url, true);
|
|
13
|
+
const parsedUrl = (0, url_1.parse)(url, true);
|
|
14
14
|
const { query: querystringObj } = parsedUrl;
|
|
15
15
|
// Having a BODY_HASH means the query is in the body
|
|
16
16
|
if (querystringObj && querystringObj[constants_1.BODY_HASH]) {
|
|
@@ -24,24 +24,24 @@ const queryFromUrl = (url) => {
|
|
|
24
24
|
return querystringObj;
|
|
25
25
|
};
|
|
26
26
|
const parseAndValidateQueryToSchema = (query, schema) => {
|
|
27
|
-
const document = graphql_1.parse(query);
|
|
28
|
-
const validation = graphql_1.validate(schema, document);
|
|
27
|
+
const document = (0, graphql_1.parse)(query);
|
|
28
|
+
const validation = (0, graphql_1.validate)(schema, document);
|
|
29
29
|
if (Array.isArray(validation) && validation.length > 0) {
|
|
30
30
|
throw validation;
|
|
31
31
|
}
|
|
32
32
|
return document;
|
|
33
33
|
};
|
|
34
|
-
|
|
34
|
+
const extractQuery = (executableSchema) => async function parseAndValidateQuery(ctx, next) {
|
|
35
35
|
const { request, req } = ctx;
|
|
36
36
|
let query;
|
|
37
37
|
if (request.is('multipart/form-data')) {
|
|
38
38
|
query = request.body;
|
|
39
39
|
}
|
|
40
40
|
else if (request.method.toUpperCase() === 'POST') {
|
|
41
|
-
query = await co_body_1.json(req, { limit: '3mb' });
|
|
41
|
+
query = await (0, co_body_1.json)(req, { limit: '3mb' });
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
|
-
query = queryFromUrl(request.url) || (await co_body_1.json(req, { limit: '3mb' }));
|
|
44
|
+
query = queryFromUrl(request.url) || (await (0, co_body_1.json)(req, { limit: '3mb' }));
|
|
45
45
|
}
|
|
46
46
|
// Assign the query before setting the query.document because if the
|
|
47
47
|
// validation fails we don't loose the query in our error log
|
|
@@ -51,3 +51,4 @@ exports.extractQuery = (executableSchema) => async function parseAndValidateQuer
|
|
|
51
51
|
})));
|
|
52
52
|
await next();
|
|
53
53
|
};
|
|
54
|
+
exports.extractQuery = extractQuery;
|
|
@@ -23,7 +23,7 @@ async function response(ctx, next) {
|
|
|
23
23
|
var _a;
|
|
24
24
|
await next();
|
|
25
25
|
const { cacheControl, status, graphqlResponse, } = ctx.graphql;
|
|
26
|
-
const cacheControlHeader = cacheControl_1.cacheControlHTTP(ctx);
|
|
26
|
+
const cacheControlHeader = (0, cacheControl_1.cacheControlHTTP)(ctx);
|
|
27
27
|
ctx.set(constants_1.CACHE_CONTROL_HEADER, cacheControlHeader);
|
|
28
28
|
if (status === 'error') {
|
|
29
29
|
// Do not generate etag for errors
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.run = void 0;
|
|
4
4
|
const graphql_1 = require("graphql");
|
|
5
|
-
|
|
5
|
+
const run = (executableSchema) => async function runHttpQuery(ctx, next) {
|
|
6
6
|
const { graphql: { query }, } = ctx;
|
|
7
7
|
const { document, operationName, variables: variableValues } = query;
|
|
8
8
|
const schema = executableSchema.schema;
|
|
9
|
-
const response = await graphql_1.execute({
|
|
9
|
+
const response = await (0, graphql_1.execute)({
|
|
10
10
|
contextValue: ctx,
|
|
11
11
|
document,
|
|
12
12
|
fieldResolver: (root, _, __, info) => root[info.fieldName],
|
|
@@ -18,3 +18,4 @@ exports.run = (executableSchema) => async function runHttpQuery(ctx, next) {
|
|
|
18
18
|
ctx.graphql.graphqlResponse = response;
|
|
19
19
|
await next();
|
|
20
20
|
};
|
|
21
|
+
exports.run = run;
|
|
@@ -4,7 +4,7 @@ exports.updateSchema = void 0;
|
|
|
4
4
|
const constants_1 = require("../../../../../constants");
|
|
5
5
|
const utils_1 = require("../../../../../utils");
|
|
6
6
|
const index_1 = require("../schema/index");
|
|
7
|
-
|
|
7
|
+
const updateSchema = (graphql, executableSchema) => async function updateRunnableSchema(ctx, next) {
|
|
8
8
|
const { clients: { apps }, vtex: { logger }, app, } = ctx;
|
|
9
9
|
if (!ctx.headers[constants_1.PROVIDER_HEADER]) {
|
|
10
10
|
await next();
|
|
@@ -13,11 +13,11 @@ exports.updateSchema = (graphql, executableSchema) => async function updateRunna
|
|
|
13
13
|
// fetches the new schema and generate a new runnable schema, updates the provider app,
|
|
14
14
|
if (executableSchema.hasProvider &&
|
|
15
15
|
(!executableSchema.provider ||
|
|
16
|
-
utils_1.majorEqualAndGreaterThan(utils_1.parseAppId(ctx.headers[constants_1.PROVIDER_HEADER]).version, utils_1.parseAppId(executableSchema.provider).version))) {
|
|
16
|
+
(0, utils_1.majorEqualAndGreaterThan)((0, utils_1.parseAppId)(ctx.headers[constants_1.PROVIDER_HEADER]).version, (0, utils_1.parseAppId)(executableSchema.provider).version))) {
|
|
17
17
|
try {
|
|
18
18
|
const newSchema = (await apps.getAppFile(ctx.headers[constants_1.PROVIDER_HEADER], 'public/schema.graphql')).data.toString('utf-8');
|
|
19
19
|
graphql.schema = newSchema;
|
|
20
|
-
const newRunnableSchema = index_1.makeSchema(graphql);
|
|
20
|
+
const newRunnableSchema = (0, index_1.makeSchema)(graphql);
|
|
21
21
|
executableSchema.schema = newRunnableSchema.schema;
|
|
22
22
|
executableSchema.provider = ctx.headers[constants_1.PROVIDER_HEADER];
|
|
23
23
|
}
|
|
@@ -27,3 +27,4 @@ exports.updateSchema = (graphql, executableSchema) => async function updateRunna
|
|
|
27
27
|
}
|
|
28
28
|
await next();
|
|
29
29
|
};
|
|
30
|
+
exports.updateSchema = updateSchema;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.upload = void 0;
|
|
4
4
|
const graphql_upload_1 = require("graphql-upload");
|
|
5
|
-
const graphqlUpload = graphql_upload_1.graphqlUploadKoa({
|
|
5
|
+
const graphqlUpload = (0, graphql_upload_1.graphqlUploadKoa)({
|
|
6
6
|
maxFieldSize: 1e6,
|
|
7
7
|
maxFileSize: 4 * 1e6,
|
|
8
8
|
maxFiles: 10,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IOClients } from '../../../../../clients/IOClients';
|
|
2
2
|
import { GraphQLOptions, ParamsContext, RecorderState } from '../../typings';
|
|
3
|
-
export
|
|
3
|
+
export type SchemaMetaData = Record<string, boolean>;
|
|
4
4
|
export declare const makeSchema: <ClientsT extends IOClients = IOClients, StateT extends RecorderState = RecorderState, CustomT extends ParamsContext = ParamsContext>(options: GraphQLOptions<ClientsT, StateT, CustomT>) => {
|
|
5
5
|
schema: import("graphql").GraphQLSchema;
|
|
6
6
|
hasProvider: boolean;
|