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

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 (40) hide show
  1. package/dist/config.d.ts +2 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js.map +1 -1
  4. package/dist/datasources/RemoteGraphQLDataSource.d.ts.map +1 -1
  5. package/dist/datasources/RemoteGraphQLDataSource.js +4 -1
  6. package/dist/datasources/RemoteGraphQLDataSource.js.map +1 -1
  7. package/dist/executeQueryPlan.d.ts.map +1 -1
  8. package/dist/executeQueryPlan.js +1 -1
  9. package/dist/executeQueryPlan.js.map +1 -1
  10. package/dist/index.d.ts +3 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +18 -6
  13. package/dist/index.js.map +1 -1
  14. package/dist/loadSupergraphSdlFromStorage.d.ts +13 -5
  15. package/dist/loadSupergraphSdlFromStorage.d.ts.map +1 -1
  16. package/dist/loadSupergraphSdlFromStorage.js +34 -7
  17. package/dist/loadSupergraphSdlFromStorage.js.map +1 -1
  18. package/dist/outOfBandReporter.d.ts +10 -12
  19. package/dist/outOfBandReporter.d.ts.map +1 -1
  20. package/dist/outOfBandReporter.js +70 -73
  21. package/dist/outOfBandReporter.js.map +1 -1
  22. package/package.json +4 -4
  23. package/src/__mocks__/make-fetch-happen-fetcher.ts +3 -1
  24. package/src/__tests__/executeQueryPlan.test.ts +598 -0
  25. package/src/__tests__/gateway/buildService.test.ts +1 -1
  26. package/src/__tests__/gateway/composedSdl.test.ts +1 -1
  27. package/src/__tests__/gateway/executor.test.ts +1 -1
  28. package/src/__tests__/gateway/reporting.test.ts +8 -5
  29. package/src/__tests__/integration/configuration.test.ts +44 -4
  30. package/src/__tests__/integration/networkRequests.test.ts +21 -19
  31. package/src/__tests__/integration/nockMocks.ts +12 -6
  32. package/src/__tests__/loadSupergraphSdlFromStorage.test.ts +101 -452
  33. package/src/__tests__/nockAssertions.ts +20 -0
  34. package/src/config.ts +3 -1
  35. package/src/datasources/RemoteGraphQLDataSource.ts +8 -2
  36. package/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +4 -4
  37. package/src/executeQueryPlan.ts +11 -1
  38. package/src/index.ts +26 -12
  39. package/src/loadSupergraphSdlFromStorage.ts +54 -8
  40. package/src/outOfBandReporter.ts +87 -89
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OutOfBandReporter = exports.OUT_OF_BAND_REPORTER_QUERY = void 0;
3
+ exports.submitOutOfBandReportIfConfigured = exports.OUT_OF_BAND_REPORTER_QUERY = void 0;
4
4
  const graphqlTypes_1 = require("./__generated__/graphqlTypes");
5
5
  exports.OUT_OF_BAND_REPORTER_QUERY = `#graphql
6
6
  mutation OOBReport($input: APIMonitoringReport) {
@@ -8,81 +8,78 @@ exports.OUT_OF_BAND_REPORTER_QUERY = `#graphql
8
8
  }
9
9
  `;
10
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
- }
11
+ async function submitOutOfBandReportIfConfigured({ error, request, endpoint, response, startedAt, endedAt, tags, fetcher, }) {
12
+ var _a, _b;
13
+ if (!endpoint) {
14
+ return;
15
+ }
16
+ let errorCode;
17
+ if (!response) {
18
+ errorCode = graphqlTypes_1.ErrorCode.ConnectionFailed;
19
+ }
20
+ else {
21
+ switch (response.status) {
22
+ case 400:
23
+ case 413:
24
+ case 422:
25
+ errorCode = graphqlTypes_1.ErrorCode.InvalidBody;
26
+ break;
27
+ case 408:
28
+ case 504:
29
+ errorCode = graphqlTypes_1.ErrorCode.Timeout;
30
+ break;
31
+ case 502:
32
+ case 503:
33
+ errorCode = graphqlTypes_1.ErrorCode.ConnectionFailed;
34
+ break;
35
+ default:
36
+ errorCode = graphqlTypes_1.ErrorCode.Other;
39
37
  }
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,
38
+ }
39
+ const responseBody = await (response === null || response === void 0 ? void 0 : response.text());
40
+ const variables = {
41
+ input: {
42
+ error: {
43
+ code: errorCode,
44
+ message: error.message,
60
45
  },
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}`);
46
+ request: {
47
+ url: request.url,
48
+ body: await request.text(),
49
+ },
50
+ response: response
51
+ ? {
52
+ httpStatusCode: response.status,
53
+ body: responseBody,
54
+ }
55
+ : null,
56
+ startedAt: startedAt.toISOString(),
57
+ endedAt: endedAt.toISOString(),
58
+ tags: tags,
59
+ },
60
+ };
61
+ try {
62
+ const oobResponse = await fetcher(endpoint, {
63
+ method: 'POST',
64
+ body: JSON.stringify({
65
+ query: exports.OUT_OF_BAND_REPORTER_QUERY,
66
+ variables,
67
+ }),
68
+ headers: {
69
+ 'apollographql-client-name': name,
70
+ 'apollographql-client-version': version,
71
+ 'user-agent': `${name}/${version}`,
72
+ 'content-type': 'application/json',
73
+ },
74
+ });
75
+ const parsedResponse = await oobResponse.json();
76
+ if (!((_a = parsedResponse === null || parsedResponse === void 0 ? void 0 : parsedResponse.data) === null || _a === void 0 ? void 0 : _a.reportError)) {
77
+ throw new Error(`Out-of-band error reporting failed: ${oobResponse.status} ${oobResponse.statusText}`);
83
78
  }
84
79
  }
80
+ catch (e) {
81
+ throw new Error(`Out-of-band error reporting failed: ${(_b = e.message) !== null && _b !== void 0 ? _b : e}`);
82
+ }
85
83
  }
86
- exports.OutOfBandReporter = OutOfBandReporter;
87
- OutOfBandReporter.endpoint = process.env.APOLLO_OUT_OF_BAND_REPORTER_ENDPOINT || null;
84
+ exports.submitOutOfBandReportIfConfigured = submitOutOfBandReportIfConfigured;
88
85
  //# sourceMappingURL=outOfBandReporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"outOfBandReporter.js","sourceRoot":"","sources":["../src/outOfBandReporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"outOfBandReporter.js","sourceRoot":"","sources":["../src/outOfBandReporter.ts"],"names":[],"mappings":";;;AAEA,+DAIsC;AAGzB,QAAA,0BAA0B,GAAgB;;;;CAItD,CAAC;AAEF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAe9C,KAAK,UAAU,iCAAiC,CAAC,EACtD,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,GAUR;;IAEC,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO;KACR;IAED,IAAI,SAAoB,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE;QACb,SAAS,GAAG,wBAAS,CAAC,gBAAgB,CAAC;KACxC;SAAM;QAEL,QAAQ,QAAQ,CAAC,MAAM,EAAE;YACvB,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,SAAS,GAAG,wBAAS,CAAC,WAAW,CAAC;gBAClC,MAAM;YACR,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,SAAS,GAAG,wBAAS,CAAC,OAAO,CAAC;gBAC9B,MAAM;YACR,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,SAAS,GAAG,wBAAS,CAAC,gBAAgB,CAAC;gBACvC,MAAM;YACR;gBACE,SAAS,GAAG,wBAAS,CAAC,KAAK,CAAC;SAC/B;KACF;IAED,MAAM,YAAY,GAAuB,MAAM,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,EAAE,CAAA,CAAC;IAEhE,MAAM,SAAS,GAA+B;QAC5C,KAAK,EAAE;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;YACD,OAAO,EAAE;gBACP,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE;aAC3B;YACD,QAAQ,EAAE,QAAQ;gBAChB,CAAC,CAAC;oBACE,cAAc,EAAE,QAAQ,CAAC,MAAM;oBAC/B,IAAI,EAAE,YAAY;iBACnB;gBACH,CAAC,CAAC,IAAI;YACR,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;YAClC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,IAAI;SACX;KACF,CAAC;IAEF,IAAI;QACF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,kCAA0B;gBACjC,SAAS;aACV,CAAC;YACF,OAAO,EAAE;gBACP,2BAA2B,EAAE,IAAI;gBACjC,8BAA8B,EAAE,OAAO;gBACvC,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE;gBAClC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QACH,MAAM,cAAc,GAA4B,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QACzE,IAAI,CAAC,CAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,0CAAE,WAAW,CAAA,EAAE;YACtC,MAAM,IAAI,KAAK,CACb,uCAAuC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,CACtF,CAAC;SACH;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAA,CAAC,CAAC,OAAO,mCAAI,CAAC,EAAE,CAAC,CAAC;KAC1E;AACH,CAAC;AA/FD,8EA+FC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/gateway",
3
- "version": "2.0.0-alpha.2",
3
+ "version": "2.0.0-alpha.3",
4
4
  "description": "Apollo Gateway",
5
5
  "author": "Apollo <packages@apollographql.com>",
6
6
  "main": "dist/index.js",
@@ -25,9 +25,9 @@
25
25
  "access": "public"
26
26
  },
27
27
  "dependencies": {
28
- "@apollo/composition": "^2.0.0-alpha.2",
28
+ "@apollo/composition": "^2.0.0-alpha.3",
29
29
  "@apollo/core-schema": "^0.2.0",
30
- "@apollo/query-planner": "^2.0.0-alpha.2",
30
+ "@apollo/query-planner": "^2.0.0-alpha.3",
31
31
  "@opentelemetry/api": "^1.0.1",
32
32
  "@types/node-fetch": "2.5.12",
33
33
  "apollo-graphql": "^0.9.5",
@@ -45,5 +45,5 @@
45
45
  "peerDependencies": {
46
46
  "graphql": "^15.7.0"
47
47
  },
48
- "gitHead": "9265ba09ec5620b931861a44603d7d5f7d4688f2"
48
+ "gitHead": "a8e0485664fafc7d9e3537f77c8907832f48d25b"
49
49
  }
@@ -20,6 +20,7 @@ interface MakeFetchHappenMock extends jest.MockedFunction<typeof fetch> {
20
20
  }
21
21
 
22
22
  const mockMakeFetchHappen = jest.fn(fetcher) as unknown as MakeFetchHappenMock;
23
+ const defaults = () => mockMakeFetchHappen;
23
24
 
24
25
  mockMakeFetchHappen.mockResponseOnce = (
25
26
  data?: BodyInit,
@@ -47,7 +48,8 @@ mockMakeFetchHappen.mockJSONResponseOnce = (
47
48
  };
48
49
 
49
50
  const makeFetchMock = {
50
- makeFetchHappenFetcher: mockMakeFetchHappen,
51
+ fetch: mockMakeFetchHappen,
52
+ defaults,
51
53
  };
52
54
 
53
55
  jest.doMock('make-fetch-happen', () => makeFetchMock);