@vtex/api 6.48.1-beta.3 → 6.49.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/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
|
@@ -6,18 +6,18 @@ const graphql_tools_1 = require("graphql-tools");
|
|
|
6
6
|
const ramda_1 = require("ramda");
|
|
7
7
|
const schemaDirectives_1 = require("./schemaDirectives");
|
|
8
8
|
const typeDefs_1 = require("./typeDefs");
|
|
9
|
-
const mergeTypeDefs = (appTypeDefs, schemaMetaData) => [appTypeDefs, typeDefs_1.nativeTypeDefs(schemaMetaData), schemaDirectives_1.nativeSchemaDirectivesTypeDefs].join('\n\n');
|
|
9
|
+
const mergeTypeDefs = (appTypeDefs, schemaMetaData) => [appTypeDefs, (0, typeDefs_1.nativeTypeDefs)(schemaMetaData), schemaDirectives_1.nativeSchemaDirectivesTypeDefs].join('\n\n');
|
|
10
10
|
const hasScalar = (typeDefs) => (scalar) => new RegExp(`scalar(\\s)+${scalar}(\\s\\n)+`).test(typeDefs);
|
|
11
11
|
const extractSchemaMetaData = (typeDefs) => {
|
|
12
|
-
const scalars = ramda_1.keys(typeDefs_1.nativeResolvers);
|
|
13
|
-
const scalarsPresentInSchema = ramda_1.map(hasScalar(typeDefs), scalars);
|
|
14
|
-
return ramda_1.zipObj(scalars, scalarsPresentInSchema);
|
|
12
|
+
const scalars = (0, ramda_1.keys)(typeDefs_1.nativeResolvers);
|
|
13
|
+
const scalarsPresentInSchema = (0, ramda_1.map)(hasScalar(typeDefs), scalars);
|
|
14
|
+
return (0, ramda_1.zipObj)(scalars, scalarsPresentInSchema);
|
|
15
15
|
};
|
|
16
|
-
|
|
16
|
+
const makeSchema = (options) => {
|
|
17
17
|
const { resolvers: appResolvers, schema: appSchema, schemaDirectives: appDirectives } = options;
|
|
18
|
-
const appTypeDefs = appSchema || fs_extra_1.readFileSync('./service/schema.graphql', 'utf8');
|
|
18
|
+
const appTypeDefs = appSchema || (0, fs_extra_1.readFileSync)('./service/schema.graphql', 'utf8');
|
|
19
19
|
const schemaMetaData = extractSchemaMetaData(appTypeDefs);
|
|
20
|
-
const executableSchema = graphql_tools_1.makeExecutableSchema({
|
|
20
|
+
const executableSchema = (0, graphql_tools_1.makeExecutableSchema)({
|
|
21
21
|
resolvers: {
|
|
22
22
|
...appResolvers,
|
|
23
23
|
...typeDefs_1.nativeResolvers,
|
|
@@ -30,3 +30,4 @@ exports.makeSchema = (options) => {
|
|
|
30
30
|
});
|
|
31
31
|
return { schema: executableSchema, hasProvider: appSchema ? true : false };
|
|
32
32
|
};
|
|
33
|
+
exports.makeSchema = makeSchema;
|
|
@@ -2,5 +2,5 @@ import DataLoader from 'dataloader';
|
|
|
2
2
|
import { Message } from '../../../../../clients/apps/MessagesGraphQL';
|
|
3
3
|
import { AppMetaInfo } from '../../../../../clients/infra/Apps';
|
|
4
4
|
import { IOClients } from './../../../../../clients/IOClients';
|
|
5
|
-
export declare const createMessagesLoader: ({ messagesGraphQL, assets }: IOClients, to: string, dependencies?: AppMetaInfo[]
|
|
6
|
-
export
|
|
5
|
+
export declare const createMessagesLoader: ({ messagesGraphQL, assets }: IOClients, to: string, dependencies?: AppMetaInfo[]) => DataLoader<Message, string>;
|
|
6
|
+
export type MessagesLoaderV2 = ReturnType<typeof createMessagesLoader>;
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.createMessagesLoader = void 0;
|
|
7
7
|
const dataloader_1 = __importDefault(require("dataloader"));
|
|
8
8
|
const ramda_1 = require("ramda");
|
|
9
|
-
const sortByContentAndFrom = (indexedMessages) => ramda_1.sortBy(([_, { content, from }]) => `__from:${from}__content:${content}`, indexedMessages);
|
|
9
|
+
const sortByContentAndFrom = (indexedMessages) => (0, ramda_1.sortBy)(([_, { content, from }]) => `__from:${from}__content:${content}`, indexedMessages);
|
|
10
10
|
// O(n) counting sort implementation
|
|
11
11
|
const sortByIndex = (indexedTranslations) => indexedTranslations.reduce((acc, [index, data]) => {
|
|
12
12
|
acc[index] = data;
|
|
@@ -50,7 +50,7 @@ const filterFromEqualsTo = (indexedMessages, to) => indexedMessages.reduce((acc,
|
|
|
50
50
|
toTranslate: [],
|
|
51
51
|
});
|
|
52
52
|
const messageToKey = ({ content, context, from }) => `:content:${content}:context:${context}:from:${from}`;
|
|
53
|
-
|
|
53
|
+
const createMessagesLoader = ({ messagesGraphQL, assets }, to, dependencies) => {
|
|
54
54
|
const loweredTo = to.toLowerCase();
|
|
55
55
|
const messagesDeps = dependencies && assets.getFilteredDependencies('vtex.messages@1.x', dependencies);
|
|
56
56
|
const depTree = messagesDeps && JSON.stringify(messagesDeps);
|
|
@@ -68,7 +68,7 @@ exports.createMessagesLoader = ({ messagesGraphQL, assets }, to, dependencies) =
|
|
|
68
68
|
const translations = depTree
|
|
69
69
|
? await messagesGraphQL.translateWithDependencies({ ...args, depTree })
|
|
70
70
|
: await messagesGraphQL.translate(args);
|
|
71
|
-
const indexedTranslations = ramda_1.zip(originalIndexes, translations);
|
|
71
|
+
const indexedTranslations = (0, ramda_1.zip)(originalIndexes, translations);
|
|
72
72
|
const allIndexedTranslations = [...indexedTranslations, ...original];
|
|
73
73
|
return sortByIndex(allIndexedTranslations);
|
|
74
74
|
}, {
|
|
@@ -78,3 +78,4 @@ exports.createMessagesLoader = ({ messagesGraphQL, assets }, to, dependencies) =
|
|
|
78
78
|
maxBatchSize: 200,
|
|
79
79
|
});
|
|
80
80
|
};
|
|
81
|
+
exports.createMessagesLoader = createMessagesLoader;
|
|
@@ -41,7 +41,7 @@ async function auth(ctx, authArgs) {
|
|
|
41
41
|
throw new apollo_server_errors_1.AuthenticationError('VtexIdclientAutCookie not found.');
|
|
42
42
|
}
|
|
43
43
|
const parsedToken = await parseIdToken(ctx.vtex.authToken, vtexIdToken);
|
|
44
|
-
if (!parsedToken || parsedToken.account
|
|
44
|
+
if (!parsedToken || parsedToken.account != ctx.vtex.account) {
|
|
45
45
|
throw new apollo_server_errors_1.AuthenticationError('Could not find user specified by VtexIdclientAutCookie.');
|
|
46
46
|
}
|
|
47
47
|
const userCanAccessResource = await getUserCanAccessResource(ctx.vtex.authToken, ctx.vtex.account, parsedToken.user, authArgs.productCode, authArgs.resourceCode);
|
|
@@ -28,7 +28,7 @@ class Deprecated extends graphql_tools_1.SchemaDirectiveVisitor {
|
|
|
28
28
|
this.maybeLogToSplunk({
|
|
29
29
|
headers: ctx.request.headers,
|
|
30
30
|
name,
|
|
31
|
-
query: ((_a = ctx.graphql.query) === null || _a === void 0 ? void 0 : _a.document) && graphql_1.print((_b = ctx.graphql.query) === null || _b === void 0 ? void 0 : _b.document),
|
|
31
|
+
query: ((_a = ctx.graphql.query) === null || _a === void 0 ? void 0 : _a.document) && (0, graphql_1.print)((_b = ctx.graphql.query) === null || _b === void 0 ? void 0 : _b.document),
|
|
32
32
|
reason,
|
|
33
33
|
variables: (_c = ctx.graphql.query) === null || _c === void 0 ? void 0 : _c.variables,
|
|
34
34
|
}, ctx.vtex.logger);
|
|
@@ -9,7 +9,7 @@ const addSettings = async (settings, ctx) => {
|
|
|
9
9
|
return ctx;
|
|
10
10
|
}
|
|
11
11
|
const { clients: { apps, assets } } = ctx;
|
|
12
|
-
const dependenciesSettings = await settings_1.getDependenciesSettings(apps, assets);
|
|
12
|
+
const dependenciesSettings = await (0, settings_1.getDependenciesSettings)(apps, assets);
|
|
13
13
|
if (!ctx.vtex) {
|
|
14
14
|
ctx.vtex = {};
|
|
15
15
|
}
|
|
@@ -19,12 +19,12 @@ class TranslatableV2 extends graphql_tools_1.SchemaDirectiveVisitor {
|
|
|
19
19
|
const dependencies = withAppsMetaInfo ? await ctx.clients.apps.getAppsMetaInfos() : undefined;
|
|
20
20
|
ctx.loaders = {
|
|
21
21
|
...ctx.loaders,
|
|
22
|
-
messagesV2: messagesLoaderV2_1.createMessagesLoader(ctx.clients, to, dependencies),
|
|
22
|
+
messagesV2: (0, messagesLoaderV2_1.createMessagesLoader)(ctx.clients, to, dependencies),
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
const response = await resolve(root, args, ctx, info);
|
|
26
26
|
const { vtex, loaders: { messagesV2 } } = ctx;
|
|
27
|
-
const handler = translations_1.handleSingleString(vtex, messagesV2, behavior, 'translatableV2');
|
|
27
|
+
const handler = (0, translations_1.handleSingleString)(vtex, messagesV2, behavior, 'translatableV2');
|
|
28
28
|
return Array.isArray(response)
|
|
29
29
|
? Promise.all(response.map(handler))
|
|
30
30
|
: handler(response);
|
|
@@ -15,12 +15,12 @@ class TranslateTo extends graphql_tools_1.SchemaDirectiveVisitor {
|
|
|
15
15
|
const dependencies = await ctx.clients.apps.getAppsMetaInfos();
|
|
16
16
|
ctx.loaders = {
|
|
17
17
|
...ctx.loaders,
|
|
18
|
-
immutableMessagesV2: messagesLoaderV2_1.createMessagesLoader(ctx.clients, language, dependencies),
|
|
18
|
+
immutableMessagesV2: (0, messagesLoaderV2_1.createMessagesLoader)(ctx.clients, language, dependencies),
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
const response = (await resolve(root, args, ctx, info));
|
|
22
22
|
const { vtex, loaders: { immutableMessagesV2 }, } = ctx;
|
|
23
|
-
const handler = translations_1.handleSingleString(vtex, immutableMessagesV2, behavior, 'translateTo');
|
|
23
|
+
const handler = (0, translations_1.handleSingleString)(vtex, immutableMessagesV2, behavior, 'translateTo');
|
|
24
24
|
return Array.isArray(response) ? Promise.all(response.map(handler)) : handler(response);
|
|
25
25
|
};
|
|
26
26
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.nativeSchemaDirectivesTypeDefs = exports.nativeSchemaDirectives = void 0;
|
|
3
|
+
exports.nativeSchemaDirectivesTypeDefs = exports.nativeSchemaDirectives = exports.formatTranslatableStringV2 = exports.parseTranslatableStringV2 = void 0;
|
|
4
4
|
const Auth_1 = require("./Auth");
|
|
5
5
|
const CacheControl_1 = require("./CacheControl");
|
|
6
6
|
const Deprecated_1 = require("./Deprecated");
|
|
@@ -10,4 +10,5 @@ exports.nativeResolvers = {
|
|
|
10
10
|
'IOUpload': ioUpload_1.resolvers,
|
|
11
11
|
'Upload': graphql_upload_1.GraphQLUpload,
|
|
12
12
|
};
|
|
13
|
-
|
|
13
|
+
const nativeTypeDefs = (metaData) => (0, ramda_1.reduce)((acc, scalar) => !metaData[scalar] ? `${acc}\nscalar ${scalar}\n` : acc, '', (0, ramda_1.keys)(exports.nativeResolvers));
|
|
14
|
+
exports.nativeTypeDefs = nativeTypeDefs;
|
|
@@ -7,10 +7,10 @@ const defaultName = 'IOSanitizedString';
|
|
|
7
7
|
exports.scalar = defaultName;
|
|
8
8
|
const noop = (html) => html;
|
|
9
9
|
const serialize = (input, options) => {
|
|
10
|
-
return xss_1.filterXSS(input, options);
|
|
10
|
+
return (0, xss_1.filterXSS)(input, options);
|
|
11
11
|
};
|
|
12
12
|
const parseValue = (value, options) => {
|
|
13
|
-
return xss_1.filterXSS(value, options);
|
|
13
|
+
return (0, xss_1.filterXSS)(value, options);
|
|
14
14
|
};
|
|
15
15
|
class IOSanitizedStringType extends graphql_1.GraphQLScalarType {
|
|
16
16
|
constructor(options) {
|
|
@@ -6,8 +6,8 @@ export interface Query {
|
|
|
6
6
|
operationName?: string;
|
|
7
7
|
document: DocumentNode;
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
export
|
|
9
|
+
type TypeFromPromise<T> = T extends Promise<infer U> ? U : T;
|
|
10
|
+
export type GraphQLResponse = TypeFromPromise<ReturnType<typeof execute>>;
|
|
11
11
|
export interface GraphQLCacheControl {
|
|
12
12
|
maxAge: number;
|
|
13
13
|
scope: 'private' | 'public' | 'segment';
|
|
@@ -22,7 +22,7 @@ export interface GraphQLContext extends ParamsContext {
|
|
|
22
22
|
cacheControl: GraphQLCacheControl;
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
export
|
|
25
|
+
export type GraphQLServiceContext = ServiceContext<IOClients, RecorderState, GraphQLContext>;
|
|
26
26
|
export interface ExecutableSchema {
|
|
27
27
|
schema: GraphQLSchema;
|
|
28
28
|
hasProvider: boolean;
|
|
@@ -13,7 +13,7 @@ const isPublicEndpoint = ({ request: { headers } }) => {
|
|
|
13
13
|
}
|
|
14
14
|
return domain_1.PUBLIC_DOMAINS.some(endpoint => publicRegExp(endpoint).test(host));
|
|
15
15
|
};
|
|
16
|
-
|
|
16
|
+
const cacheControlHTTP = (ctx) => {
|
|
17
17
|
const { graphql: { cacheControl: { maxAge, scope: scopeHint, noCache: noCacheHint, noStore: noStoreHint, }, }, vtex: { production, }, } = ctx;
|
|
18
18
|
const finalHeader = [];
|
|
19
19
|
const noCache = noCacheHint || !production || isPublicEndpoint(ctx);
|
|
@@ -31,3 +31,4 @@ exports.cacheControlHTTP = (ctx) => {
|
|
|
31
31
|
}
|
|
32
32
|
return finalHeader.join(',');
|
|
33
33
|
};
|
|
34
|
+
exports.cacheControlHTTP = cacheControlHTTP;
|
|
@@ -16,7 +16,7 @@ const trimVariables = (variables) => {
|
|
|
16
16
|
};
|
|
17
17
|
const detailsFromCtx = (ctx) => {
|
|
18
18
|
const { headers: { 'x-forwarded-host': forwardedHost, 'x-forwarded-proto': forwardedProto, 'x-vtex-platform': platform, }, vtex: { operationId, requestId, }, } = ctx;
|
|
19
|
-
const queryRest = ramda_1.pick(QUERY_FIELDS, ctx.graphql.query || {});
|
|
19
|
+
const queryRest = (0, ramda_1.pick)(QUERY_FIELDS, ctx.graphql.query || {});
|
|
20
20
|
const variables = ctx.request.is('multipart/form-data')
|
|
21
21
|
? '[GraphQL Upload]'
|
|
22
22
|
: trimVariables(queryRest.variables);
|
|
@@ -34,14 +34,14 @@ const detailsFromCtx = (ctx) => {
|
|
|
34
34
|
};
|
|
35
35
|
};
|
|
36
36
|
const formatError = (error, details) => {
|
|
37
|
-
const formattedError = ramda_1.pick(ERROR_FIELD_WHITELIST, error);
|
|
37
|
+
const formattedError = (0, ramda_1.pick)(ERROR_FIELD_WHITELIST, error);
|
|
38
38
|
if (!formattedError.extensions) {
|
|
39
39
|
formattedError.extensions = {
|
|
40
40
|
code: 'INTERNAL_SERVER_ERROR',
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
if (formattedError.originalError) {
|
|
44
|
-
formattedError.originalError = error_1.cleanError(formattedError.originalError);
|
|
44
|
+
formattedError.originalError = (0, error_1.cleanError)(formattedError.originalError);
|
|
45
45
|
if (formattedError.stack === formattedError.originalError.stack) {
|
|
46
46
|
delete formattedError.originalError.stack;
|
|
47
47
|
}
|
|
@@ -49,8 +49,8 @@ const formatError = (error, details) => {
|
|
|
49
49
|
formattedError.extensions.exception = {
|
|
50
50
|
message: formattedError.originalError.message,
|
|
51
51
|
name: formattedError.originalError.name,
|
|
52
|
-
...ramda_1.omit(error_1.SENSITIVE_EXCEPTION_FIELDS, formattedError.originalError),
|
|
53
|
-
sensitive: ramda_1.pick(error_1.SENSITIVE_EXCEPTION_FIELDS, formattedError.originalError),
|
|
52
|
+
...(0, ramda_1.omit)(error_1.SENSITIVE_EXCEPTION_FIELDS, formattedError.originalError),
|
|
53
|
+
sensitive: (0, ramda_1.pick)(error_1.SENSITIVE_EXCEPTION_FIELDS, formattedError.originalError),
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
else {
|
|
@@ -60,10 +60,10 @@ const formatError = (error, details) => {
|
|
|
60
60
|
const extendedException = {
|
|
61
61
|
message: formattedError.originalError.message,
|
|
62
62
|
name: formattedError.originalError.name,
|
|
63
|
-
...ramda_1.omit(error_1.SENSITIVE_EXCEPTION_FIELDS, mergedException),
|
|
64
|
-
sensitive: ramda_1.pick(error_1.SENSITIVE_EXCEPTION_FIELDS, mergedException),
|
|
63
|
+
...(0, ramda_1.omit)(error_1.SENSITIVE_EXCEPTION_FIELDS, mergedException),
|
|
64
|
+
sensitive: (0, ramda_1.pick)(error_1.SENSITIVE_EXCEPTION_FIELDS, mergedException),
|
|
65
65
|
};
|
|
66
|
-
formattedError.extensions.exception = error_1.cleanError(extendedException);
|
|
66
|
+
formattedError.extensions.exception = (0, error_1.cleanError)(extendedException);
|
|
67
67
|
}
|
|
68
68
|
// Make originalError not enumerable to prevent duplicated log and response information
|
|
69
69
|
Object.defineProperty(formattedError, 'originalError', { enumerable: false });
|
|
@@ -71,7 +71,8 @@ const formatError = (error, details) => {
|
|
|
71
71
|
Object.assign(formattedError, details);
|
|
72
72
|
return formattedError;
|
|
73
73
|
};
|
|
74
|
-
|
|
74
|
+
const createFormatError = (ctx) => {
|
|
75
75
|
const details = detailsFromCtx(ctx);
|
|
76
76
|
return (error) => formatError(error, details);
|
|
77
77
|
};
|
|
78
|
+
exports.createFormatError = createFormatError;
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generatePathName = void 0;
|
|
4
4
|
const ramda_1 = require("ramda");
|
|
5
|
-
|
|
6
|
-
const pathFieldNames = ramda_1.filter(value => typeof value === 'string', rpath);
|
|
5
|
+
const generatePathName = (rpath) => {
|
|
6
|
+
const pathFieldNames = (0, ramda_1.filter)(value => typeof value === 'string', rpath);
|
|
7
7
|
return pathFieldNames.join('.');
|
|
8
8
|
};
|
|
9
|
+
exports.generatePathName = generatePathName;
|
|
@@ -8,7 +8,7 @@ export interface TranslatableMessageV2 {
|
|
|
8
8
|
content: string;
|
|
9
9
|
context?: string;
|
|
10
10
|
}
|
|
11
|
-
export
|
|
11
|
+
export type TranslationDirectiveType = 'translatableV2' | 'translateTo';
|
|
12
12
|
export declare const parseTranslatableStringV2: (rawMessage: string) => TranslatableMessageV2;
|
|
13
13
|
export declare const formatTranslatableStringV2: ({ from, content, context }: TranslatableMessageV2) => string;
|
|
14
14
|
export declare const handleSingleString: (ctx: IOContext, loader: import("dataloader")<import("../../../../../clients").Message, string>, behavior: Behavior, directiveName: TranslationDirectiveType) => (rawMessage: string | null) => Promise<string | null>;
|
|
@@ -4,7 +4,7 @@ exports.handleSingleString = exports.formatTranslatableStringV2 = exports.parseT
|
|
|
4
4
|
exports.CONTEXT_REGEX = /\(\(\((?<context>(.)*)\)\)\)/;
|
|
5
5
|
exports.FROM_REGEX = /\<\<\<(?<from>(.)*)\>\>\>/;
|
|
6
6
|
exports.CONTENT_REGEX = /\(\(\((?<context>(.)*)\)\)\)|\<\<\<(?<from>(.)*)\>\>\>/g;
|
|
7
|
-
|
|
7
|
+
const parseTranslatableStringV2 = (rawMessage) => {
|
|
8
8
|
var _a, _b, _c, _d;
|
|
9
9
|
const context = (_b = (_a = rawMessage.match(exports.CONTEXT_REGEX)) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b.context;
|
|
10
10
|
const from = (_d = (_c = rawMessage.match(exports.FROM_REGEX)) === null || _c === void 0 ? void 0 : _c.groups) === null || _d === void 0 ? void 0 : _d.from;
|
|
@@ -15,13 +15,15 @@ exports.parseTranslatableStringV2 = (rawMessage) => {
|
|
|
15
15
|
from: from === null || from === void 0 ? void 0 : from.trim(),
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
|
-
exports.
|
|
19
|
-
|
|
18
|
+
exports.parseTranslatableStringV2 = parseTranslatableStringV2;
|
|
19
|
+
const formatTranslatableStringV2 = ({ from, content, context }) => `${content} ${context ? `(((${context})))` : ''} ${from ? `<<<${from}>>>` : ''}`;
|
|
20
|
+
exports.formatTranslatableStringV2 = formatTranslatableStringV2;
|
|
21
|
+
const handleSingleString = (ctx, loader, behavior, directiveName) => async (rawMessage) => {
|
|
20
22
|
// Messages only know how to process non empty strings.
|
|
21
23
|
if (rawMessage == null) {
|
|
22
24
|
return rawMessage;
|
|
23
25
|
}
|
|
24
|
-
const { content, context, from: maybeFrom } = exports.parseTranslatableStringV2(rawMessage);
|
|
26
|
+
const { content, context, from: maybeFrom } = (0, exports.parseTranslatableStringV2)(rawMessage);
|
|
25
27
|
const { binding, tenant } = ctx;
|
|
26
28
|
if (content == null) {
|
|
27
29
|
throw new Error(`@${directiveName} directive needs a content to translate, but received ${JSON.stringify(rawMessage)}`);
|
|
@@ -37,3 +39,4 @@ exports.handleSingleString = (ctx, loader, behavior, directiveName) => async (ra
|
|
|
37
39
|
from,
|
|
38
40
|
});
|
|
39
41
|
};
|
|
42
|
+
exports.handleSingleString = handleSingleString;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import TokenBucket from 'tokenbucket';
|
|
2
2
|
import { IOClients } from '../../../../clients/IOClients';
|
|
3
3
|
import { ClientsConfig, ParamsContext, RecorderState, RouteHandler, ServiceRoute } from '../typings';
|
|
4
|
-
export declare const createPrivateHttpRoute: <T extends IOClients, U extends RecorderState, V extends ParamsContext>(clientsConfig: ClientsConfig<T>, serviceHandler:
|
|
5
|
-
export declare const createPublicHttpRoute: <T extends IOClients, U extends RecorderState, V extends ParamsContext>(clientsConfig: ClientsConfig<T>, serviceHandler:
|
|
4
|
+
export declare const createPrivateHttpRoute: <T extends IOClients, U extends RecorderState, V extends ParamsContext>(clientsConfig: ClientsConfig<T>, serviceHandler: RouteHandler<T, U, V> | RouteHandler<T, U, V>[], serviceRoute: ServiceRoute, routeId: string, globalLimiter: TokenBucket | undefined) => import("koa-compose").ComposedMiddleware<import("../typings").ServiceContext<T, U, V>>;
|
|
5
|
+
export declare const createPublicHttpRoute: <T extends IOClients, U extends RecorderState, V extends ParamsContext>(clientsConfig: ClientsConfig<T>, serviceHandler: RouteHandler<T, U, V> | RouteHandler<T, U, V>[], serviceRoute: ServiceRoute, routeId: string, globalLimiter: TokenBucket | undefined) => import("koa-compose").ComposedMiddleware<import("../typings").ServiceContext<T, U, V>>;
|
|
@@ -14,46 +14,48 @@ const setCookie_1 = require("./middlewares/setCookie");
|
|
|
14
14
|
const settings_1 = require("./middlewares/settings");
|
|
15
15
|
const timings_1 = require("./middlewares/timings");
|
|
16
16
|
const vary_1 = require("./middlewares/vary");
|
|
17
|
-
|
|
17
|
+
const createPrivateHttpRoute = (clientsConfig, serviceHandler, serviceRoute, routeId, globalLimiter) => {
|
|
18
18
|
var _a, _b;
|
|
19
19
|
const { implementation, options } = clientsConfig;
|
|
20
|
-
const middlewares = toArray_1.toArray(serviceHandler);
|
|
20
|
+
const middlewares = (0, toArray_1.toArray)(serviceHandler);
|
|
21
21
|
const pipeline = [
|
|
22
|
-
tracingMiddlewares_1.nameSpanOperationMiddleware('private-handler', routeId),
|
|
23
|
-
context_1.createPvtContextMiddleware(routeId, serviceRoute),
|
|
22
|
+
(0, tracingMiddlewares_1.nameSpanOperationMiddleware)('private-handler', routeId),
|
|
23
|
+
(0, context_1.createPvtContextMiddleware)(routeId, serviceRoute),
|
|
24
24
|
cancellationToken_1.cancellationToken,
|
|
25
25
|
requestStats_1.trackIncomingRequestStats,
|
|
26
26
|
vary_1.vary,
|
|
27
27
|
authTokens_1.authTokens,
|
|
28
|
-
clients_1.clients(implementation, options),
|
|
29
|
-
...(serviceRoute.settingsType === 'workspace' || serviceRoute.settingsType === 'userAndWorkspace' ? [settings_1.getServiceSettings()] : []),
|
|
28
|
+
(0, clients_1.clients)(implementation, options),
|
|
29
|
+
...(serviceRoute.settingsType === 'workspace' || serviceRoute.settingsType === 'userAndWorkspace' ? [(0, settings_1.getServiceSettings)()] : []),
|
|
30
30
|
timings_1.timings,
|
|
31
|
-
rateLimit_1.concurrentRateLimiter((_a = serviceRoute === null || serviceRoute === void 0 ? void 0 : serviceRoute.rateLimitPerReplica) === null || _a === void 0 ? void 0 : _a.concurrent),
|
|
32
|
-
rateLimit_1.perMinuteRateLimiter((_b = serviceRoute === null || serviceRoute === void 0 ? void 0 : serviceRoute.rateLimitPerReplica) === null || _b === void 0 ? void 0 : _b.perMinute, globalLimiter),
|
|
33
|
-
tracingMiddlewares_1.traceUserLandRemainingPipelineMiddleware(),
|
|
31
|
+
(0, rateLimit_1.concurrentRateLimiter)((_a = serviceRoute === null || serviceRoute === void 0 ? void 0 : serviceRoute.rateLimitPerReplica) === null || _a === void 0 ? void 0 : _a.concurrent),
|
|
32
|
+
(0, rateLimit_1.perMinuteRateLimiter)((_b = serviceRoute === null || serviceRoute === void 0 ? void 0 : serviceRoute.rateLimitPerReplica) === null || _b === void 0 ? void 0 : _b.perMinute, globalLimiter),
|
|
33
|
+
(0, tracingMiddlewares_1.traceUserLandRemainingPipelineMiddleware)(),
|
|
34
34
|
...middlewares,
|
|
35
35
|
];
|
|
36
|
-
return compose_1.compose(pipeline);
|
|
36
|
+
return (0, compose_1.compose)(pipeline);
|
|
37
37
|
};
|
|
38
|
-
exports.
|
|
38
|
+
exports.createPrivateHttpRoute = createPrivateHttpRoute;
|
|
39
|
+
const createPublicHttpRoute = (clientsConfig, serviceHandler, serviceRoute, routeId, globalLimiter) => {
|
|
39
40
|
var _a, _b;
|
|
40
41
|
const { implementation, options } = clientsConfig;
|
|
41
|
-
const middlewares = toArray_1.toArray(serviceHandler);
|
|
42
|
+
const middlewares = (0, toArray_1.toArray)(serviceHandler);
|
|
42
43
|
const pipeline = [
|
|
43
|
-
tracingMiddlewares_1.nameSpanOperationMiddleware('public-handler', routeId),
|
|
44
|
-
context_1.createPubContextMiddleware(routeId, serviceRoute),
|
|
44
|
+
(0, tracingMiddlewares_1.nameSpanOperationMiddleware)('public-handler', routeId),
|
|
45
|
+
(0, context_1.createPubContextMiddleware)(routeId, serviceRoute),
|
|
45
46
|
cancellationToken_1.cancellationToken,
|
|
46
47
|
requestStats_1.trackIncomingRequestStats,
|
|
47
48
|
vary_1.vary,
|
|
48
49
|
authTokens_1.authTokens,
|
|
49
|
-
clients_1.clients(implementation, options),
|
|
50
|
-
...(serviceRoute.settingsType === 'workspace' || serviceRoute.settingsType === 'userAndWorkspace' ? [settings_1.getServiceSettings()] : []),
|
|
50
|
+
(0, clients_1.clients)(implementation, options),
|
|
51
|
+
...(serviceRoute.settingsType === 'workspace' || serviceRoute.settingsType === 'userAndWorkspace' ? [(0, settings_1.getServiceSettings)()] : []),
|
|
51
52
|
setCookie_1.removeSetCookie,
|
|
52
53
|
timings_1.timings,
|
|
53
|
-
rateLimit_1.concurrentRateLimiter((_a = serviceRoute === null || serviceRoute === void 0 ? void 0 : serviceRoute.rateLimitPerReplica) === null || _a === void 0 ? void 0 : _a.concurrent),
|
|
54
|
-
rateLimit_1.perMinuteRateLimiter((_b = serviceRoute === null || serviceRoute === void 0 ? void 0 : serviceRoute.rateLimitPerReplica) === null || _b === void 0 ? void 0 : _b.perMinute, globalLimiter),
|
|
55
|
-
tracingMiddlewares_1.traceUserLandRemainingPipelineMiddleware(),
|
|
54
|
+
(0, rateLimit_1.concurrentRateLimiter)((_a = serviceRoute === null || serviceRoute === void 0 ? void 0 : serviceRoute.rateLimitPerReplica) === null || _a === void 0 ? void 0 : _a.concurrent),
|
|
55
|
+
(0, rateLimit_1.perMinuteRateLimiter)((_b = serviceRoute === null || serviceRoute === void 0 ? void 0 : serviceRoute.rateLimitPerReplica) === null || _b === void 0 ? void 0 : _b.perMinute, globalLimiter),
|
|
56
|
+
(0, tracingMiddlewares_1.traceUserLandRemainingPipelineMiddleware)(),
|
|
56
57
|
...middlewares,
|
|
57
58
|
];
|
|
58
|
-
return compose_1.compose(pipeline);
|
|
59
|
+
return (0, compose_1.compose)(pipeline);
|
|
59
60
|
};
|
|
61
|
+
exports.createPublicHttpRoute = createPublicHttpRoute;
|
|
@@ -4,11 +4,11 @@ exports.createPubContextMiddleware = exports.createPvtContextMiddleware = void 0
|
|
|
4
4
|
const querystring_1 = require("querystring");
|
|
5
5
|
const constants_1 = require("../../../../../constants");
|
|
6
6
|
const context_1 = require("../../utils/context");
|
|
7
|
-
|
|
7
|
+
const createPvtContextMiddleware = (routeId, { smartcache }) => {
|
|
8
8
|
return async function pvtContext(ctx, next) {
|
|
9
9
|
const { params, request: { header }, } = ctx;
|
|
10
10
|
ctx.vtex = {
|
|
11
|
-
...context_1.prepareHandlerCtx(header, ctx.tracing),
|
|
11
|
+
...(0, context_1.prepareHandlerCtx)(header, ctx.tracing),
|
|
12
12
|
...(smartcache && { recorder: ctx.state.recorder }),
|
|
13
13
|
route: {
|
|
14
14
|
id: routeId,
|
|
@@ -19,19 +19,21 @@ exports.createPvtContextMiddleware = (routeId, { smartcache }) => {
|
|
|
19
19
|
await next();
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
|
-
exports.
|
|
22
|
+
exports.createPvtContextMiddleware = createPvtContextMiddleware;
|
|
23
|
+
const createPubContextMiddleware = (routeId, { smartcache }) => {
|
|
23
24
|
return async function pubContext(ctx, next) {
|
|
24
25
|
const { request: { header }, } = ctx;
|
|
25
26
|
ctx.vtex = {
|
|
26
|
-
...context_1.prepareHandlerCtx(header, ctx.tracing),
|
|
27
|
+
...(0, context_1.prepareHandlerCtx)(header, ctx.tracing),
|
|
27
28
|
...(smartcache && { recorder: ctx.state.recorder }),
|
|
28
29
|
route: {
|
|
29
30
|
declarer: header[constants_1.COLOSSUS_ROUTE_DECLARER_HEADER],
|
|
30
31
|
id: routeId,
|
|
31
|
-
params: querystring_1.parse(header[constants_1.COLOSSUS_PARAMS_HEADER]),
|
|
32
|
+
params: (0, querystring_1.parse)(header[constants_1.COLOSSUS_PARAMS_HEADER]),
|
|
32
33
|
type: 'public',
|
|
33
34
|
},
|
|
34
35
|
};
|
|
35
36
|
await next();
|
|
36
37
|
};
|
|
37
38
|
};
|
|
39
|
+
exports.createPubContextMiddleware = createPubContextMiddleware;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.error = void 0;
|
|
4
|
-
const axios_1 = require("axios");
|
|
5
4
|
const constants_1 = require("../../../../../constants");
|
|
6
5
|
const RequestCancelledError_1 = require("../../../../../errors/RequestCancelledError");
|
|
7
6
|
const TooManyRequestsError_1 = require("../../../../../errors/TooManyRequestsError");
|
|
@@ -61,15 +60,13 @@ async function error(ctx, next) {
|
|
|
61
60
|
return;
|
|
62
61
|
}
|
|
63
62
|
console.error('[node-vtex-api error]', e);
|
|
64
|
-
const err = error_1.cleanError(e);
|
|
63
|
+
const err = (0, error_1.cleanError)(e);
|
|
65
64
|
// Add response
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
: 500;
|
|
72
|
-
}
|
|
65
|
+
ctx.status = e && e.status >= 400 && e.status <= 599
|
|
66
|
+
? e.status
|
|
67
|
+
: ctx.status >= 500 && ctx.status <= 599
|
|
68
|
+
? ctx.status
|
|
69
|
+
: 500;
|
|
73
70
|
// Do not generate etag for errors
|
|
74
71
|
ctx.remove(META_HEADER);
|
|
75
72
|
ctx.remove(ETAG_HEADER);
|
|
@@ -12,7 +12,7 @@ function perMinuteRateLimiter(rateLimit, globalLimiter) {
|
|
|
12
12
|
if (!rateLimit && !globalLimiter) {
|
|
13
13
|
return noopMiddleware;
|
|
14
14
|
}
|
|
15
|
-
const tokenBucket = tokenBucket_1.createTokenBucket(rateLimit, globalLimiter);
|
|
15
|
+
const tokenBucket = (0, tokenBucket_1.createTokenBucket)(rateLimit, globalLimiter);
|
|
16
16
|
return function perMinuteRateMiddleware(ctx, next) {
|
|
17
17
|
if (!tokenBucket.removeTokensSync(1)) {
|
|
18
18
|
throw new errors_1.TooManyRequestsError(responseMessagePerMinute);
|
|
@@ -9,26 +9,26 @@ Cookies dropped:
|
|
|
9
9
|
|
|
10
10
|
${keys.join('\n\t')}
|
|
11
11
|
`;
|
|
12
|
-
const findStr = (target, set) => ramda_1.find((a) => a.toLocaleLowerCase() === target, set);
|
|
12
|
+
const findStr = (target, set) => (0, ramda_1.find)((a) => a.toLocaleLowerCase() === target, set);
|
|
13
13
|
const findScopeInCacheControl = (cacheControl) => {
|
|
14
14
|
const splitted = cacheControl && cacheControl.split(/\s*,\s*/g);
|
|
15
15
|
const scopePublic = splitted && findStr('public', splitted);
|
|
16
16
|
return scopePublic;
|
|
17
17
|
};
|
|
18
|
-
const cookieKey = (cookie) => ramda_1.compose(ramda_1.head, ramda_1.split('='))(cookie);
|
|
19
|
-
const indexCookieByKeys = (setCookie) => ramda_1.map((cookie) => [cookieKey(cookie), cookie], setCookie);
|
|
18
|
+
const cookieKey = (cookie) => (0, ramda_1.compose)(ramda_1.head, (0, ramda_1.split)('='))(cookie);
|
|
19
|
+
const indexCookieByKeys = (setCookie) => (0, ramda_1.map)((cookie) => [cookieKey(cookie), cookie], setCookie);
|
|
20
20
|
async function removeSetCookie(ctx, next) {
|
|
21
21
|
const { vtex: { logger } } = ctx;
|
|
22
22
|
await next();
|
|
23
23
|
const setCookie = ctx.response.headers['set-cookie'];
|
|
24
|
-
if (!setCookie || ramda_1.isEmpty(setCookie)) {
|
|
24
|
+
if (!setCookie || (0, ramda_1.isEmpty)(setCookie)) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
27
|
const cacheControl = ctx.response.headers['cache-control'];
|
|
28
28
|
const scope = findScopeInCacheControl(cacheControl);
|
|
29
29
|
if (scope === 'public') {
|
|
30
30
|
const indexedCookies = indexCookieByKeys(setCookie);
|
|
31
|
-
const cookies = ramda_1.reduce((acc, [key, payload]) => {
|
|
31
|
+
const cookies = (0, ramda_1.reduce)((acc, [key, payload]) => {
|
|
32
32
|
if (BLACKLISTED_COOKIES.has(key)) {
|
|
33
33
|
acc.droppedKeys.push(key);
|
|
34
34
|
}
|
|
@@ -5,5 +5,5 @@ import { Assets } from './../../../../../clients/infra/Assets';
|
|
|
5
5
|
import { ParamsContext, RecorderState, ServiceContext } from './../../typings';
|
|
6
6
|
export declare const getFilteredDependencies: (appAtMajor: string, dependencies: AppMetaInfo[]) => AppMetaInfo[];
|
|
7
7
|
export declare const getDependenciesHash: (dependencies: AppMetaInfo[]) => string;
|
|
8
|
-
export declare const getDependenciesSettings: (apps: Apps, assets: Assets, tracingConfig?: RequestTracingConfig
|
|
8
|
+
export declare const getDependenciesSettings: (apps: Apps, assets: Assets, tracingConfig?: RequestTracingConfig) => Promise<Record<string, any>[]>;
|
|
9
9
|
export declare const getServiceSettings: () => <T extends IOClients, U extends RecorderState, V extends ParamsContext>(ctx: ServiceContext<T, U, V>, next: () => Promise<void>) => Promise<void>;
|
|
@@ -5,7 +5,7 @@ const crypto_1 = require("crypto");
|
|
|
5
5
|
const ramda_1 = require("ramda");
|
|
6
6
|
const constants_1 = require("../../../../../constants");
|
|
7
7
|
const app_1 = require("./../../../../../utils/app");
|
|
8
|
-
const joinIds = ramda_1.join('');
|
|
8
|
+
const joinIds = (0, ramda_1.join)('');
|
|
9
9
|
const dependsOnApp = (appAtMajor) => (a) => {
|
|
10
10
|
const [name, major] = appAtMajor.split('@');
|
|
11
11
|
const majorInt = major.includes('.') ? major.split('.')[0] : major;
|
|
@@ -16,30 +16,34 @@ const dependsOnApp = (appAtMajor) => (a) => {
|
|
|
16
16
|
const [depMajor] = version.split('.');
|
|
17
17
|
return majorInt === depMajor;
|
|
18
18
|
};
|
|
19
|
-
|
|
19
|
+
const getFilteredDependencies = (appAtMajor, dependencies) => {
|
|
20
20
|
const depends = dependsOnApp(appAtMajor);
|
|
21
21
|
return dependencies.filter(depends);
|
|
22
22
|
};
|
|
23
|
-
exports.
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
exports.getFilteredDependencies = getFilteredDependencies;
|
|
24
|
+
const getDependenciesHash = (dependencies) => {
|
|
25
|
+
const dependingApps = (0, ramda_1.pluck)('id', dependencies);
|
|
26
|
+
return (0, crypto_1.createHash)('md5')
|
|
26
27
|
.update(joinIds(dependingApps))
|
|
27
28
|
.digest('hex');
|
|
28
29
|
};
|
|
29
|
-
exports.
|
|
30
|
+
exports.getDependenciesHash = getDependenciesHash;
|
|
31
|
+
const getDependenciesSettings = async (apps, assets, tracingConfig) => {
|
|
30
32
|
const appId = constants_1.APP.ID;
|
|
31
33
|
const metaInfos = await apps.getAppsMetaInfos(undefined, undefined, tracingConfig);
|
|
32
|
-
const appAtMajor = app_1.appIdToAppAtMajor(appId);
|
|
34
|
+
const appAtMajor = (0, app_1.appIdToAppAtMajor)(appId);
|
|
33
35
|
return await assets.getSettings(metaInfos, appAtMajor, undefined, tracingConfig);
|
|
34
36
|
};
|
|
35
|
-
exports.
|
|
37
|
+
exports.getDependenciesSettings = getDependenciesSettings;
|
|
38
|
+
const getServiceSettings = () => {
|
|
36
39
|
return async function settingsContext(ctx, next) {
|
|
37
40
|
var _a;
|
|
38
41
|
const { clients: { apps, assets }, } = ctx;
|
|
39
42
|
const rootSpan = (_a = ctx.tracing) === null || _a === void 0 ? void 0 : _a.currentSpan;
|
|
40
|
-
const dependenciesSettings = await exports.getDependenciesSettings(apps, assets, { tracing: { rootSpan } });
|
|
43
|
+
const dependenciesSettings = await (0, exports.getDependenciesSettings)(apps, assets, { tracing: { rootSpan } });
|
|
41
44
|
// TODO: for now returning all settings, but the ideia is to do merge
|
|
42
45
|
ctx.vtex.settings = dependenciesSettings;
|
|
43
46
|
await next();
|
|
44
47
|
};
|
|
45
48
|
};
|
|
49
|
+
exports.getServiceSettings = getServiceSettings;
|
|
@@ -8,7 +8,7 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
8
8
|
const constants_1 = require("../../../../../constants");
|
|
9
9
|
const status_1 = require("../../../../../utils/status");
|
|
10
10
|
const time_1 = require("../../../../../utils/time");
|
|
11
|
-
const APP_ELAPSED_TIME_LOCATOR = time_1.shrinkTimings(time_1.formatTimingName({
|
|
11
|
+
const APP_ELAPSED_TIME_LOCATOR = (0, time_1.shrinkTimings)((0, time_1.formatTimingName)({
|
|
12
12
|
hopNumber: 0,
|
|
13
13
|
source: process.env.VTEX_APP_NAME,
|
|
14
14
|
target: '',
|
|
@@ -36,10 +36,10 @@ async function timings(ctx, next) {
|
|
|
36
36
|
// Errors will be caught by the next middleware so we don't have to catch.
|
|
37
37
|
await next();
|
|
38
38
|
const { status: statusCode, vtex: { route: { id } }, timings: { total }, vtex } = ctx;
|
|
39
|
-
const totalMillis = time_1.hrToMillis(total);
|
|
39
|
+
const totalMillis = (0, time_1.hrToMillis)(total);
|
|
40
40
|
console.log(log(ctx, totalMillis));
|
|
41
41
|
console.log(logBillingInfo(vtex, totalMillis));
|
|
42
|
-
const status = status_1.statusLabel(statusCode);
|
|
42
|
+
const status = (0, status_1.statusLabel)(statusCode);
|
|
43
43
|
// Only batch successful responses so metrics don't consider errors
|
|
44
44
|
metrics.batch(`http-handler-${id}`, status === 'success' ? total : undefined, { [status]: 1 });
|
|
45
45
|
}
|