UNPKG

3 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.ApolloServerPluginInlineTraceDisabled = exports.ApolloServerPluginInlineTrace = void 0;
4const apollo_reporting_protobuf_1 = require("apollo-reporting-protobuf");
5const traceTreeBuilder_1 = require("../traceTreeBuilder");
6const schemaIsFederated_1 = require("../schemaIsFederated");
7function ApolloServerPluginInlineTrace(options = Object.create(null)) {
8 let enabled = options.__onlyIfSchemaIsFederated ? null : true;
9 return {
10 __internal_plugin_id__() {
11 return 'InlineTrace';
12 },
13 async serverWillStart({ schema, logger }) {
14 if (enabled === null) {
15 enabled = schemaIsFederated_1.schemaIsFederated(schema);
16 if (enabled) {
17 logger.info('Enabling inline tracing for this federated service. To disable, use ' +
18 'ApolloServerPluginInlineTraceDisabled.');
19 }
20 }
21 },
22 async requestDidStart({ request: { http } }) {
23 if (!enabled) {
24 return;
25 }
26 const treeBuilder = new traceTreeBuilder_1.TraceTreeBuilder({
27 rewriteError: options.rewriteError,
28 });
29 if ((http === null || http === void 0 ? void 0 : http.headers.get('apollo-federation-include-trace')) !== 'ftv1') {
30 return;
31 }
32 treeBuilder.startTiming();
33 return {
34 async executionDidStart() {
35 return {
36 willResolveField({ info }) {
37 return treeBuilder.willResolveField(info);
38 },
39 };
40 },
41 async didEncounterErrors({ errors }) {
42 treeBuilder.didEncounterErrors(errors);
43 },
44 async willSendResponse({ response }) {
45 treeBuilder.stopTiming();
46 const encodedUint8Array = apollo_reporting_protobuf_1.Trace.encode(treeBuilder.trace).finish();
47 const encodedBuffer = Buffer.from(encodedUint8Array, encodedUint8Array.byteOffset, encodedUint8Array.byteLength);
48 const extensions = response.extensions || (response.extensions = Object.create(null));
49 if (typeof extensions.ftv1 !== 'undefined') {
50 throw new Error('The `ftv1` extension was already present.');
51 }
52 extensions.ftv1 = encodedBuffer.toString('base64');
53 },
54 };
55 },
56 };
57}
58exports.ApolloServerPluginInlineTrace = ApolloServerPluginInlineTrace;
59function ApolloServerPluginInlineTraceDisabled() {
60 return {
61 __internal_plugin_id__() {
62 return 'InlineTrace';
63 },
64 };
65}
66exports.ApolloServerPluginInlineTraceDisabled = ApolloServerPluginInlineTraceDisabled;
67//# sourceMappingURL=index.js.map
\No newline at end of file