@apollo/gateway 2.0.0-alpha.2 → 2.0.0-alpha.6

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.
Files changed (130) hide show
  1. package/dist/config.d.ts +43 -15
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +28 -18
  4. package/dist/config.js.map +1 -1
  5. package/dist/datasources/LocalGraphQLDataSource.js.map +1 -1
  6. package/dist/datasources/RemoteGraphQLDataSource.d.ts.map +1 -1
  7. package/dist/datasources/RemoteGraphQLDataSource.js +4 -1
  8. package/dist/datasources/RemoteGraphQLDataSource.js.map +1 -1
  9. package/dist/executeQueryPlan.d.ts.map +1 -1
  10. package/dist/executeQueryPlan.js +2 -2
  11. package/dist/executeQueryPlan.js.map +1 -1
  12. package/dist/index.d.ts +37 -22
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +199 -283
  15. package/dist/index.js.map +1 -1
  16. package/dist/schema-helper/addResolversToSchema.d.ts +4 -0
  17. package/dist/schema-helper/addResolversToSchema.d.ts.map +1 -0
  18. package/dist/schema-helper/addResolversToSchema.js +62 -0
  19. package/dist/schema-helper/addResolversToSchema.js.map +1 -0
  20. package/dist/schema-helper/error.d.ts +6 -0
  21. package/dist/schema-helper/error.d.ts.map +1 -0
  22. package/dist/schema-helper/error.js +14 -0
  23. package/dist/schema-helper/error.js.map +1 -0
  24. package/dist/schema-helper/index.d.ts +4 -0
  25. package/dist/schema-helper/index.d.ts.map +1 -0
  26. package/dist/schema-helper/index.js +16 -0
  27. package/dist/schema-helper/index.js.map +1 -0
  28. package/dist/schema-helper/resolverMap.d.ts +16 -0
  29. package/dist/schema-helper/resolverMap.d.ts.map +1 -0
  30. package/dist/schema-helper/resolverMap.js +3 -0
  31. package/dist/schema-helper/resolverMap.js.map +1 -0
  32. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts +31 -0
  33. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts.map +1 -0
  34. package/dist/supergraphManagers/IntrospectAndCompose/index.js +112 -0
  35. package/dist/supergraphManagers/IntrospectAndCompose/index.js.map +1 -0
  36. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts +12 -0
  37. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts.map +1 -0
  38. package/dist/{loadServicesFromRemoteEndpoint.js → supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js} +6 -6
  39. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js.map +1 -0
  40. package/dist/supergraphManagers/LegacyFetcher/index.d.ts +33 -0
  41. package/dist/supergraphManagers/LegacyFetcher/index.d.ts.map +1 -0
  42. package/dist/supergraphManagers/LegacyFetcher/index.js +149 -0
  43. package/dist/supergraphManagers/LegacyFetcher/index.js.map +1 -0
  44. package/dist/supergraphManagers/LocalCompose/index.d.ts +19 -0
  45. package/dist/supergraphManagers/LocalCompose/index.d.ts.map +1 -0
  46. package/dist/supergraphManagers/LocalCompose/index.js +55 -0
  47. package/dist/supergraphManagers/LocalCompose/index.js.map +1 -0
  48. package/dist/supergraphManagers/UplinkFetcher/index.d.ts +33 -0
  49. package/dist/supergraphManagers/UplinkFetcher/index.d.ts.map +1 -0
  50. package/dist/supergraphManagers/UplinkFetcher/index.js +98 -0
  51. package/dist/supergraphManagers/UplinkFetcher/index.js.map +1 -0
  52. package/dist/supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.d.ts +25 -0
  53. package/dist/supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.d.ts.map +1 -0
  54. package/dist/{loadSupergraphSdlFromStorage.js → supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.js} +40 -15
  55. package/dist/supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.js.map +1 -0
  56. package/dist/supergraphManagers/UplinkFetcher/outOfBandReporter.d.ts +13 -0
  57. package/dist/supergraphManagers/UplinkFetcher/outOfBandReporter.d.ts.map +1 -0
  58. package/dist/supergraphManagers/UplinkFetcher/outOfBandReporter.js +85 -0
  59. package/dist/supergraphManagers/UplinkFetcher/outOfBandReporter.js.map +1 -0
  60. package/dist/supergraphManagers/index.d.ts +6 -0
  61. package/dist/supergraphManagers/index.d.ts.map +1 -0
  62. package/dist/supergraphManagers/index.js +14 -0
  63. package/dist/supergraphManagers/index.js.map +1 -0
  64. package/dist/utilities/createHash.d.ts +2 -0
  65. package/dist/utilities/createHash.d.ts.map +1 -0
  66. package/dist/utilities/createHash.js +15 -0
  67. package/dist/utilities/createHash.js.map +1 -0
  68. package/dist/utilities/isNodeLike.d.ts +3 -0
  69. package/dist/utilities/isNodeLike.d.ts.map +1 -0
  70. package/dist/utilities/isNodeLike.js +8 -0
  71. package/dist/utilities/isNodeLike.js.map +1 -0
  72. package/package.json +9 -7
  73. package/src/__mocks__/make-fetch-happen-fetcher.ts +3 -1
  74. package/src/__tests__/build-query-plan.feature +52 -0
  75. package/src/__tests__/executeQueryPlan.test.ts +599 -1
  76. package/src/__tests__/execution-utils.ts +3 -3
  77. package/src/__tests__/gateway/buildService.test.ts +3 -3
  78. package/src/__tests__/gateway/endToEnd.test.ts +1 -1
  79. package/src/__tests__/gateway/executor.test.ts +1 -1
  80. package/src/__tests__/gateway/lifecycle-hooks.test.ts +59 -125
  81. package/src/__tests__/gateway/opentelemetry.test.ts +8 -4
  82. package/src/__tests__/gateway/queryPlanCache.test.ts +25 -12
  83. package/src/__tests__/gateway/reporting.test.ts +42 -13
  84. package/src/__tests__/gateway/supergraphSdl.test.ts +397 -0
  85. package/src/__tests__/integration/aliases.test.ts +9 -4
  86. package/src/__tests__/integration/configuration.test.ts +146 -9
  87. package/src/__tests__/integration/logger.test.ts +1 -1
  88. package/src/__tests__/integration/networkRequests.test.ts +99 -147
  89. package/src/__tests__/integration/nockMocks.ts +30 -16
  90. package/src/__tests__/nockAssertions.ts +20 -0
  91. package/src/config.ts +149 -38
  92. package/src/datasources/LocalGraphQLDataSource.ts +1 -1
  93. package/src/datasources/RemoteGraphQLDataSource.ts +8 -2
  94. package/src/datasources/__tests__/LocalGraphQLDataSource.test.ts +1 -1
  95. package/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +4 -4
  96. package/src/executeQueryPlan.ts +14 -2
  97. package/src/index.ts +325 -452
  98. package/src/schema-helper/addResolversToSchema.ts +83 -0
  99. package/src/schema-helper/error.ts +11 -0
  100. package/src/schema-helper/index.ts +3 -0
  101. package/src/schema-helper/resolverMap.ts +23 -0
  102. package/src/supergraphManagers/IntrospectAndCompose/__tests__/IntrospectAndCompose.test.ts +370 -0
  103. package/src/{__tests__ → supergraphManagers/IntrospectAndCompose/__tests__}/loadServicesFromRemoteEndpoint.test.ts +5 -5
  104. package/src/supergraphManagers/IntrospectAndCompose/__tests__/tsconfig.json +8 -0
  105. package/src/supergraphManagers/IntrospectAndCompose/index.ts +160 -0
  106. package/src/{loadServicesFromRemoteEndpoint.ts → supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.ts} +6 -6
  107. package/src/supergraphManagers/LegacyFetcher/index.ts +226 -0
  108. package/src/supergraphManagers/LocalCompose/index.ts +79 -0
  109. package/src/supergraphManagers/UplinkFetcher/__tests__/loadSupergraphSdlFromStorage.test.ts +397 -0
  110. package/src/supergraphManagers/UplinkFetcher/__tests__/tsconfig.json +8 -0
  111. package/src/supergraphManagers/UplinkFetcher/index.ts +130 -0
  112. package/src/{loadSupergraphSdlFromStorage.ts → supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.ts} +68 -17
  113. package/src/supergraphManagers/UplinkFetcher/outOfBandReporter.ts +126 -0
  114. package/src/supergraphManagers/index.ts +5 -0
  115. package/src/utilities/__tests__/cleanErrorOfInaccessibleElements.test.ts +12 -9
  116. package/src/utilities/createHash.ts +10 -0
  117. package/src/utilities/isNodeLike.ts +11 -0
  118. package/dist/loadServicesFromRemoteEndpoint.d.ts +0 -13
  119. package/dist/loadServicesFromRemoteEndpoint.d.ts.map +0 -1
  120. package/dist/loadServicesFromRemoteEndpoint.js.map +0 -1
  121. package/dist/loadSupergraphSdlFromStorage.d.ts +0 -13
  122. package/dist/loadSupergraphSdlFromStorage.d.ts.map +0 -1
  123. package/dist/loadSupergraphSdlFromStorage.js.map +0 -1
  124. package/dist/outOfBandReporter.d.ts +0 -15
  125. package/dist/outOfBandReporter.d.ts.map +0 -1
  126. package/dist/outOfBandReporter.js +0 -88
  127. package/dist/outOfBandReporter.js.map +0 -1
  128. package/src/__tests__/gateway/composedSdl.test.ts +0 -44
  129. package/src/__tests__/loadSupergraphSdlFromStorage.test.ts +0 -694
  130. package/src/outOfBandReporter.ts +0 -128
@@ -0,0 +1,126 @@
1
+ import { fetch, Response, Request } from 'apollo-server-env';
2
+ import { GraphQLError } from 'graphql';
3
+ import {
4
+ ErrorCode,
5
+ OobReportMutation,
6
+ OobReportMutationVariables,
7
+ } from '../../__generated__/graphqlTypes';
8
+
9
+ // Magic /* GraphQL */ comment below is for codegen, do not remove
10
+ export const OUT_OF_BAND_REPORTER_QUERY = /* GraphQL */`#graphql
11
+ mutation OOBReport($input: APIMonitoringReport) {
12
+ reportError(report: $input)
13
+ }
14
+ `;
15
+
16
+ const { name, version } = require('../../../package.json');
17
+
18
+ type OobReportMutationResult =
19
+ | OobReportMutationSuccess
20
+ | OobReportMutationFailure;
21
+
22
+ interface OobReportMutationSuccess {
23
+ data: OobReportMutation;
24
+ }
25
+
26
+ interface OobReportMutationFailure {
27
+ data?: OobReportMutation;
28
+ errors: GraphQLError[];
29
+ }
30
+
31
+ export async function submitOutOfBandReportIfConfigured({
32
+ error,
33
+ request,
34
+ endpoint,
35
+ response,
36
+ startedAt,
37
+ endedAt,
38
+ tags,
39
+ fetcher,
40
+ }: {
41
+ error: Error;
42
+ request: Request;
43
+ endpoint: string | undefined;
44
+ response?: Response;
45
+ startedAt: Date;
46
+ endedAt: Date;
47
+ tags?: string[];
48
+ fetcher: typeof fetch;
49
+ }) {
50
+ // don't send report if the endpoint url is not configured
51
+ if (!endpoint) {
52
+ return;
53
+ }
54
+
55
+ let errorCode: ErrorCode;
56
+ if (!response) {
57
+ errorCode = ErrorCode.ConnectionFailed;
58
+ } else {
59
+ // possible error situations to check against
60
+ switch (response.status) {
61
+ case 400:
62
+ case 413:
63
+ case 422:
64
+ errorCode = ErrorCode.InvalidBody;
65
+ break;
66
+ case 408:
67
+ case 504:
68
+ errorCode = ErrorCode.Timeout;
69
+ break;
70
+ case 502:
71
+ case 503:
72
+ errorCode = ErrorCode.ConnectionFailed;
73
+ break;
74
+ default:
75
+ errorCode = ErrorCode.Other;
76
+ }
77
+ }
78
+
79
+ const responseBody: string | undefined = await response?.text();
80
+
81
+ const variables: OobReportMutationVariables = {
82
+ input: {
83
+ error: {
84
+ code: errorCode,
85
+ message: error.message,
86
+ },
87
+ request: {
88
+ url: request.url,
89
+ body: await request.text(),
90
+ },
91
+ response: response
92
+ ? {
93
+ httpStatusCode: response.status,
94
+ body: responseBody,
95
+ }
96
+ : null,
97
+ startedAt: startedAt.toISOString(),
98
+ endedAt: endedAt.toISOString(),
99
+ tags: tags,
100
+ },
101
+ };
102
+
103
+ try {
104
+ const oobResponse = await fetcher(endpoint, {
105
+ method: 'POST',
106
+ body: JSON.stringify({
107
+ query: OUT_OF_BAND_REPORTER_QUERY,
108
+ variables,
109
+ }),
110
+ headers: {
111
+ 'apollographql-client-name': name,
112
+ 'apollographql-client-version': version,
113
+ 'user-agent': `${name}/${version}`,
114
+ 'content-type': 'application/json',
115
+ },
116
+ });
117
+ const parsedResponse: OobReportMutationResult = await oobResponse.json();
118
+ if (!parsedResponse?.data?.reportError) {
119
+ throw new Error(
120
+ `Out-of-band error reporting failed: ${oobResponse.status} ${oobResponse.statusText}`,
121
+ );
122
+ }
123
+ } catch (e) {
124
+ throw new Error(`Out-of-band error reporting failed: ${e.message ?? e}`);
125
+ }
126
+ }
@@ -0,0 +1,5 @@
1
+ export { LocalCompose } from './LocalCompose';
2
+ export { LegacyFetcher } from './LegacyFetcher';
3
+ export { IntrospectAndCompose } from './IntrospectAndCompose';
4
+ export { UplinkFetcher } from './UplinkFetcher';
5
+ export { UplinkFetcherError } from './UplinkFetcher/loadSupergraphSdlFromStorage'
@@ -1,6 +1,6 @@
1
- import { execute, GraphQLError, parse } from "graphql";
2
- import { cleanErrorOfInaccessibleNames } from "../cleanErrorOfInaccessibleNames";
3
- import { buildSchema } from "@apollo/federation-internals";
1
+ import { execute, GraphQLError, parse } from 'graphql';
2
+ import { cleanErrorOfInaccessibleNames } from '../cleanErrorOfInaccessibleNames';
3
+ import { buildSchema } from '@apollo/federation-internals';
4
4
 
5
5
  describe('cleanErrorOfInaccessibleNames', () => {
6
6
  const coreSchema = buildSchema(`
@@ -49,19 +49,22 @@ describe('cleanErrorOfInaccessibleNames', () => {
49
49
  const schema = coreSchema.toAPISchema().toGraphQLJSSchema();
50
50
 
51
51
  it('removes inaccessible type names from error messages', async () => {
52
- const result = await execute(schema, parse('{fooField{someField}}'), {
53
- fooField: {
54
- __typename: 'Bar',
55
- someField: 'test',
52
+ const result = await execute({
53
+ schema,
54
+ document: parse('{fooField{someField}}'),
55
+ rootValue: {
56
+ fooField: {
57
+ __typename: 'Bar',
58
+ someField: 'test',
59
+ },
56
60
  },
57
61
  });
58
62
 
59
63
  const cleaned = cleanErrorOfInaccessibleNames(schema, result.errors![0]!);
60
64
  expect(cleaned.message).toMatchInlineSnapshot(
61
- `"Abstract type \\"Foo\\" was resolve to a type [inaccessible type] that does not exist inside schema."`,
65
+ `"Abstract type \\"Foo\\" was resolved to a type [inaccessible type] that does not exist inside the schema."`,
62
66
  );
63
67
  });
64
-
65
68
  it('removes multiple/repeated inaccessible type names from error messages', async () => {
66
69
  const contrivedError = new GraphQLError(
67
70
  `Something something "Bar" and "Bar" again, as well as "Bar2".`,
@@ -0,0 +1,10 @@
1
+ import isNodeLike from './isNodeLike';
2
+
3
+ export function createHash (kind: string): import('crypto').Hash {
4
+ if (isNodeLike) {
5
+ // Use module.require instead of just require to avoid bundling whatever
6
+ // crypto polyfills a non-Node bundler might fall back to.
7
+ return module.require('crypto').createHash(kind);
8
+ }
9
+ return require('sha.js')(kind);
10
+ }
@@ -0,0 +1,11 @@
1
+ export default typeof process === 'object' &&
2
+ process &&
3
+ // We used to check `process.release.name === "node"`, however that doesn't
4
+ // account for certain forks of Node.js which are otherwise identical to
5
+ // Node.js. For example, NodeSource's N|Solid reports itself as "nsolid",
6
+ // though it's mostly the same build of Node.js with an extra addon.
7
+ process.release &&
8
+ process.versions &&
9
+ // The one thing which is present on both Node.js and N|Solid (a fork of
10
+ // Node.js), is `process.versions.node` being defined.
11
+ typeof process.versions.node === 'string';
@@ -1,13 +0,0 @@
1
- import { HeadersInit } from 'node-fetch';
2
- import { GraphQLDataSource } from './datasources/types';
3
- import { CompositionUpdate, ServiceEndpointDefinition } from './config';
4
- declare type Service = ServiceEndpointDefinition & {
5
- dataSource: GraphQLDataSource;
6
- };
7
- export declare function getServiceDefinitionsFromRemoteEndpoint({ serviceList, getServiceIntrospectionHeaders, serviceSdlCache, }: {
8
- serviceList: Service[];
9
- getServiceIntrospectionHeaders: (service: ServiceEndpointDefinition) => Promise<HeadersInit | undefined>;
10
- serviceSdlCache: Map<string, string>;
11
- }): Promise<CompositionUpdate>;
12
- export {};
13
- //# sourceMappingURL=loadServicesFromRemoteEndpoint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loadServicesFromRemoteEndpoint.d.ts","sourceRoot":"","sources":["../src/loadServicesFromRemoteEndpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,WAAW,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAgC,MAAM,qBAAqB,CAAC;AAEtF,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAGxE,aAAK,OAAO,GAAG,yBAAyB,GAAG;IACzC,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,wBAAsB,uCAAuC,CAAC,EAC5D,WAAW,EACX,8BAA8B,EAC9B,eAAe,GAChB,EAAE;IACD,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,8BAA8B,EAAE,CAC9B,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACtC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4D7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"loadServicesFromRemoteEndpoint.js","sourceRoot":"","sources":["../src/loadServicesFromRemoteEndpoint.ts"],"names":[],"mappings":";;;AACA,qCAAgC;AAChC,2CAAkD;AAClD,+CAAsF;AACtF,yBAA8C;AAQvC,KAAK,UAAU,uCAAuC,CAAC,EAC5D,WAAW,EACX,8BAA8B,EAC9B,eAAe,GAOhB;IACC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;QACvC,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;KACH;IAED,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;QAC/E,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,+BAA+B,CAAC,CAAC;SACrE;QAED,MAAM,OAAO,GAAmB;YAC9B,KAAK,EAAE,2BAAwB;YAC/B,IAAI,EAAE;gBACJ,GAAG;gBACH,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,oBAAO,CAAC,MAAM,8BAA8B,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;aAC1E;SACF,CAAC;QAEF,OAAO,UAAU;aACd,OAAO,CAAC;YACP,IAAI,EAAE,oCAA4B,CAAC,cAAc;YACjD,OAAO;YACP,OAAO,EAAE,EAAE;SACZ,CAAC;aACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAqB,EAAE;YAC5C,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAa,CAAC;gBAC7C,MAAM,kBAAkB,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAGrD,IAAI,kBAAkB,KAAK,QAAQ,EAAE;oBACnC,WAAW,GAAG,IAAI,CAAC;iBACpB;gBACD,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACpC,OAAO;oBACL,IAAI;oBACJ,GAAG;oBACH,QAAQ,EAAE,IAAA,eAAK,EAAC,QAAQ,CAAC;iBAC1B,CAAC;aACH;YAED,MAAM,IAAI,KAAK,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,MAAM,YAAY,GAChB,0CAA0C,IAAI,QAAQ,GAAG,EAAE;gBAC3D,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAExD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAA;AAC5C,CAAC;AAtED,0FAsEC"}
@@ -1,13 +0,0 @@
1
- import { fetch } from 'apollo-server-env';
2
- export declare const SUPERGRAPH_SDL_QUERY = "#graphql\n query SupergraphSdl($apiKey: String!, $ref: String!, $ifAfterId: ID) {\n routerConfig(ref: $ref, apiKey: $apiKey, ifAfterId: $ifAfterId) {\n __typename\n ... on RouterConfigResult {\n id\n supergraphSdl: supergraphSDL\n }\n ... on FetchError {\n code\n message\n }\n }\n }\n";
3
- export declare function loadSupergraphSdlFromStorage({ graphRef, apiKey, endpoint, fetcher, compositionId, }: {
4
- graphRef: string;
5
- apiKey: string;
6
- endpoint: string;
7
- fetcher: typeof fetch;
8
- compositionId: string | null;
9
- }): Promise<{
10
- id: string;
11
- supergraphSdl: string;
12
- } | null>;
13
- //# sourceMappingURL=loadSupergraphSdlFromStorage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loadSupergraphSdlFromStorage.d.ts","sourceRoot":"","sources":["../src/loadSupergraphSdlFromStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,mBAAmB,CAAC;AAM7D,eAAO,MAAM,oBAAoB,+VAchC,CAAC;AAoBF,wBAAsB,4BAA4B,CAAC,EACjD,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,EACP,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,KAAK,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;;;UAuFA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"loadSupergraphSdlFromStorage.js","sourceRoot":"","sources":["../src/loadSupergraphSdlFromStorage.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { fetch, Response, Request } from 'apollo-server-env';
2
- export declare const OUT_OF_BAND_REPORTER_QUERY = "#graphql\n mutation OOBReport($input: APIMonitoringReport) {\n reportError(report: $input)\n }\n";
3
- export declare class OutOfBandReporter {
4
- static endpoint: string | null;
5
- submitOutOfBandReportIfConfigured({ error, request, response, startedAt, endedAt, tags, fetcher, }: {
6
- error: Error;
7
- request: Request;
8
- response?: Response;
9
- startedAt: Date;
10
- endedAt: Date;
11
- tags?: string[];
12
- fetcher: typeof fetch;
13
- }): Promise<void>;
14
- }
15
- //# sourceMappingURL=outOfBandReporter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"outOfBandReporter.d.ts","sourceRoot":"","sources":["../src/outOfBandReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAS7D,eAAO,MAAM,0BAA0B,0GAItC,CAAC;AAgBF,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAA4D;IAEpF,iCAAiC,CAAC,EACtC,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,GACR,EAAE;QACD,KAAK,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC;QAChB,OAAO,EAAE,IAAI,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,KAAK,CAAC;KACvB;CA+EF"}
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OutOfBandReporter = exports.OUT_OF_BAND_REPORTER_QUERY = void 0;
4
- const graphqlTypes_1 = require("./__generated__/graphqlTypes");
5
- exports.OUT_OF_BAND_REPORTER_QUERY = `#graphql
6
- mutation OOBReport($input: APIMonitoringReport) {
7
- reportError(report: $input)
8
- }
9
- `;
10
- const { name, version } = require('../package.json');
11
- class OutOfBandReporter {
12
- async submitOutOfBandReportIfConfigured({ error, request, response, startedAt, endedAt, tags, fetcher, }) {
13
- var _a, _b;
14
- if (!OutOfBandReporter.endpoint) {
15
- return;
16
- }
17
- let errorCode;
18
- if (!response) {
19
- errorCode = graphqlTypes_1.ErrorCode.ConnectionFailed;
20
- }
21
- else {
22
- switch (response.status) {
23
- case 400:
24
- case 413:
25
- case 422:
26
- errorCode = graphqlTypes_1.ErrorCode.InvalidBody;
27
- break;
28
- case 408:
29
- case 504:
30
- errorCode = graphqlTypes_1.ErrorCode.Timeout;
31
- break;
32
- case 502:
33
- case 503:
34
- errorCode = graphqlTypes_1.ErrorCode.ConnectionFailed;
35
- break;
36
- default:
37
- errorCode = graphqlTypes_1.ErrorCode.Other;
38
- }
39
- }
40
- const responseBody = await (response === null || response === void 0 ? void 0 : response.text());
41
- const variables = {
42
- input: {
43
- error: {
44
- code: errorCode,
45
- message: error.message,
46
- },
47
- request: {
48
- url: request.url,
49
- body: await request.text(),
50
- },
51
- response: response
52
- ? {
53
- httpStatusCode: response.status,
54
- body: responseBody,
55
- }
56
- : null,
57
- startedAt: startedAt.toISOString(),
58
- endedAt: endedAt.toISOString(),
59
- tags: tags,
60
- },
61
- };
62
- try {
63
- const oobResponse = await fetcher(OutOfBandReporter.endpoint, {
64
- method: 'POST',
65
- body: JSON.stringify({
66
- query: exports.OUT_OF_BAND_REPORTER_QUERY,
67
- variables,
68
- }),
69
- headers: {
70
- 'apollographql-client-name': name,
71
- 'apollographql-client-version': version,
72
- 'user-agent': `${name}/${version}`,
73
- 'content-type': 'application/json',
74
- },
75
- });
76
- const parsedResponse = await oobResponse.json();
77
- if (!((_a = parsedResponse === null || parsedResponse === void 0 ? void 0 : parsedResponse.data) === null || _a === void 0 ? void 0 : _a.reportError)) {
78
- throw new Error(`Out-of-band error reporting failed: ${oobResponse.status} ${oobResponse.statusText}`);
79
- }
80
- }
81
- catch (e) {
82
- throw new Error(`Out-of-band error reporting failed: ${(_b = e.message) !== null && _b !== void 0 ? _b : e}`);
83
- }
84
- }
85
- }
86
- exports.OutOfBandReporter = OutOfBandReporter;
87
- OutOfBandReporter.endpoint = process.env.APOLLO_OUT_OF_BAND_REPORTER_ENDPOINT || null;
88
- //# sourceMappingURL=outOfBandReporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"outOfBandReporter.js","sourceRoot":"","sources":["../src/outOfBandReporter.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import { ApolloGateway } from '@apollo/gateway';
2
- import { ApolloServer } from 'apollo-server';
3
- import { fetch } from '../../__mocks__/apollo-server-env';
4
- import { getTestingSupergraphSdl } from '../execution-utils';
5
-
6
- async function getSupergraphSdlGatewayServer() {
7
- const server = new ApolloServer({
8
- gateway: new ApolloGateway({
9
- supergraphSdl: getTestingSupergraphSdl(),
10
- }),
11
- });
12
-
13
- await server.listen({ port: 0 });
14
- return server;
15
- }
16
-
17
- describe('Using supergraphSdl configuration', () => {
18
- it('successfully starts and serves requests to the proper services', async () => {
19
- const server = await getSupergraphSdlGatewayServer();
20
-
21
- fetch.mockJSONResponseOnce({
22
- data: { me: { username: '@jbaxleyiii' } },
23
- });
24
-
25
- const result = await server.executeOperation({
26
- query: '{ me { username } }',
27
- });
28
-
29
- expect(result.data).toMatchInlineSnapshot(`
30
- Object {
31
- "me": Object {
32
- "username": "@jbaxleyiii",
33
- },
34
- }
35
- `);
36
-
37
- const [url, request] = fetch.mock.calls[0];
38
- expect(url).toEqual('https://accounts.api.com.invalid');
39
- expect(request?.body).toEqual(
40
- JSON.stringify({ query: '{me{username}}', variables: {} }),
41
- );
42
- await server.stop();
43
- });
44
- });