1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.ApolloServerPluginInlineTraceDisabled = exports.ApolloServerPluginInlineTrace = void 0;
|
4 | const apollo_reporting_protobuf_1 = require("apollo-reporting-protobuf");
|
5 | const traceTreeBuilder_1 = require("../traceTreeBuilder");
|
6 | const schemaIsFederated_1 = require("../schemaIsFederated");
|
7 | function 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 | }
|
58 | exports.ApolloServerPluginInlineTrace = ApolloServerPluginInlineTrace;
|
59 | function ApolloServerPluginInlineTraceDisabled() {
|
60 | return {
|
61 | __internal_plugin_id__() {
|
62 | return 'InlineTrace';
|
63 | },
|
64 | };
|
65 | }
|
66 | exports.ApolloServerPluginInlineTraceDisabled = ApolloServerPluginInlineTraceDisabled;
|
67 |
|
\ | No newline at end of file |