@apollo/gateway 0.43.1 → 0.45.0-alpha.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +14 -2
  2. package/dist/__generated__/graphqlTypes.d.ts +13 -11
  3. package/dist/__generated__/graphqlTypes.d.ts.map +1 -1
  4. package/dist/__generated__/graphqlTypes.js.map +1 -1
  5. package/dist/config.d.ts +3 -8
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +6 -17
  8. package/dist/config.js.map +1 -1
  9. package/dist/index.d.ts +4 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +33 -33
  12. package/dist/index.js.map +1 -1
  13. package/dist/loadSupergraphSdlFromStorage.d.ts +15 -6
  14. package/dist/loadSupergraphSdlFromStorage.d.ts.map +1 -1
  15. package/dist/loadSupergraphSdlFromStorage.js +40 -9
  16. package/dist/loadSupergraphSdlFromStorage.js.map +1 -1
  17. package/dist/outOfBandReporter.d.ts +10 -12
  18. package/dist/outOfBandReporter.d.ts.map +1 -1
  19. package/dist/outOfBandReporter.js +70 -73
  20. package/dist/outOfBandReporter.js.map +1 -1
  21. package/package.json +11 -11
  22. package/src/__generated__/graphqlTypes.ts +13 -11
  23. package/src/__tests__/gateway/reporting.test.ts +5 -3
  24. package/src/__tests__/integration/configuration.test.ts +32 -11
  25. package/src/__tests__/integration/networkRequests.test.ts +44 -32
  26. package/src/__tests__/integration/nockMocks.ts +42 -8
  27. package/src/__tests__/loadSupergraphSdlFromStorage.test.ts +129 -375
  28. package/src/__tests__/nockAssertions.ts +20 -0
  29. package/src/config.ts +10 -43
  30. package/src/index.ts +43 -54
  31. package/src/loadSupergraphSdlFromStorage.ts +61 -12
  32. package/src/outOfBandReporter.ts +87 -89
  33. package/dist/legacyLoadServicesFromStorage.d.ts +0 -20
  34. package/dist/legacyLoadServicesFromStorage.d.ts.map +0 -1
  35. package/dist/legacyLoadServicesFromStorage.js +0 -62
  36. package/dist/legacyLoadServicesFromStorage.js.map +0 -1
  37. package/src/__tests__/integration/legacyNetworkRequests.test.ts +0 -279
  38. package/src/__tests__/integration/legacyNockMocks.ts +0 -113
  39. package/src/legacyLoadServicesFromStorage.ts +0 -170
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadSupergraphSdlFromStorage = exports.SUPERGRAPH_SDL_QUERY = void 0;
3
+ exports.loadSupergraphSdlFromStorage = exports.loadSupergraphSdlFromUplinks = exports.SUPERGRAPH_SDL_QUERY = void 0;
4
4
  const apollo_server_env_1 = require("apollo-server-env");
5
5
  const outOfBandReporter_1 = require("./outOfBandReporter");
6
6
  exports.SUPERGRAPH_SDL_QUERY = `#graphql
7
- query SupergraphSdl($apiKey: String!, $ref: String!) {
8
- routerConfig(ref: $ref, apiKey: $apiKey) {
7
+ query SupergraphSdl($apiKey: String!, $ref: String!, $ifAfterId: ID) {
8
+ routerConfig(ref: $ref, apiKey: $apiKey, ifAfterId: $ifAfterId) {
9
9
  __typename
10
10
  ... on RouterConfigResult {
11
11
  id
@@ -20,7 +20,33 @@ exports.SUPERGRAPH_SDL_QUERY = `#graphql
20
20
  `;
21
21
  const { name, version } = require('../package.json');
22
22
  const fetchErrorMsg = "An error occurred while fetching your schema from Apollo: ";
23
- async function loadSupergraphSdlFromStorage({ graphRef, apiKey, endpoint, fetcher, }) {
23
+ let fetchCounter = 0;
24
+ async function loadSupergraphSdlFromUplinks({ graphRef, apiKey, endpoints, errorReportingEndpoint, fetcher, compositionId, maxRetries, }) {
25
+ let retries = 0;
26
+ let lastException = null;
27
+ let result = null;
28
+ while (retries++ <= maxRetries && result == null) {
29
+ try {
30
+ result = await loadSupergraphSdlFromStorage({
31
+ graphRef,
32
+ apiKey,
33
+ endpoint: endpoints[fetchCounter++ % endpoints.length],
34
+ errorReportingEndpoint,
35
+ fetcher,
36
+ compositionId
37
+ });
38
+ }
39
+ catch (e) {
40
+ lastException = e;
41
+ }
42
+ }
43
+ if (result === null && lastException !== null) {
44
+ throw lastException;
45
+ }
46
+ return result;
47
+ }
48
+ exports.loadSupergraphSdlFromUplinks = loadSupergraphSdlFromUplinks;
49
+ async function loadSupergraphSdlFromStorage({ graphRef, apiKey, endpoint, errorReportingEndpoint, fetcher, compositionId, }) {
24
50
  var _a, _b;
25
51
  let result;
26
52
  const requestDetails = {
@@ -30,6 +56,7 @@ async function loadSupergraphSdlFromStorage({ graphRef, apiKey, endpoint, fetche
30
56
  variables: {
31
57
  ref: graphRef,
32
58
  apiKey,
59
+ ifAfterId: compositionId,
33
60
  },
34
61
  }),
35
62
  headers: {
@@ -40,19 +67,19 @@ async function loadSupergraphSdlFromStorage({ graphRef, apiKey, endpoint, fetche
40
67
  },
41
68
  };
42
69
  const request = new apollo_server_env_1.Request(endpoint, requestDetails);
43
- const OOBReport = new outOfBandReporter_1.OutOfBandReporter();
44
70
  const startTime = new Date();
45
71
  try {
46
72
  result = await fetcher(endpoint, requestDetails);
47
73
  }
48
74
  catch (e) {
49
75
  const endTime = new Date();
50
- await OOBReport.submitOutOfBandReportIfConfigured({
76
+ await (0, outOfBandReporter_1.submitOutOfBandReportIfConfigured)({
51
77
  error: e,
52
78
  request,
79
+ endpoint: errorReportingEndpoint,
53
80
  startedAt: startTime,
54
81
  endedAt: endTime,
55
- fetcher
82
+ fetcher,
56
83
  });
57
84
  throw new Error(fetchErrorMsg + ((_a = e.message) !== null && _a !== void 0 ? _a : e));
58
85
  }
@@ -70,13 +97,14 @@ async function loadSupergraphSdlFromStorage({ graphRef, apiKey, endpoint, fetche
70
97
  }
71
98
  }
72
99
  else {
73
- await OOBReport.submitOutOfBandReportIfConfigured({
100
+ await (0, outOfBandReporter_1.submitOutOfBandReportIfConfigured)({
74
101
  error: new Error(fetchErrorMsg + result.status + ' ' + result.statusText),
75
102
  request,
103
+ endpoint: errorReportingEndpoint,
76
104
  response: result,
77
105
  startedAt: startTime,
78
106
  endedAt: endTime,
79
- fetcher
107
+ fetcher,
80
108
  });
81
109
  throw new Error(fetchErrorMsg + result.status + ' ' + result.statusText);
82
110
  }
@@ -89,6 +117,9 @@ async function loadSupergraphSdlFromStorage({ graphRef, apiKey, endpoint, fetche
89
117
  const { code, message } = routerConfig;
90
118
  throw new Error(`${code}: ${message}`);
91
119
  }
120
+ else if (routerConfig.__typename === 'Unchanged') {
121
+ return null;
122
+ }
92
123
  else {
93
124
  throw new Error('Programming error: unhandled response failure');
94
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loadSupergraphSdlFromStorage.js","sourceRoot":"","sources":["../src/loadSupergraphSdlFromStorage.ts"],"names":[],"mappings":";;;AAAA,yDAA6D;AAE7D,2DAAwD;AAI3C,QAAA,oBAAoB,GAAgB;;;;;;;;;;;;;;CAchD,CAAC;AAgBF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAErD,MAAM,aAAa,GAAG,4DAA4D,CAAC;AAE5E,KAAK,UAAU,4BAA4B,CAAC,EACjD,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,GAMR;;IACC,IAAI,MAAgB,CAAC;IACrB,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,4BAAoB;YAC3B,SAAS,EAAE;gBACT,GAAG,EAAE,QAAQ;gBACb,MAAM;aACP;SACF,CAAC;QACF,OAAO,EAAE;YACP,2BAA2B,EAAE,IAAI;YACjC,8BAA8B,EAAE,OAAO;YACvC,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE;YAClC,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC;IAEF,MAAM,OAAO,GAAY,IAAI,2BAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,IAAI,qCAAiB,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;IAC5B,IAAI;QACF,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;KAClD;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAE3B,MAAM,SAAS,CAAC,iCAAiC,CAAC;YAChD,KAAK,EAAE,CAAC;YACR,OAAO;YACP,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO;YAChB,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,MAAA,CAAC,CAAC,OAAO,mCAAI,CAAC,CAAC,CAAC,CAAC;KACnD;IAED,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;IAC3B,IAAI,QAAkC,CAAC;IAEvC,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;QACtC,IAAI;YACF,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;SAChC;QAAC,OAAO,CAAC,EAAE;YAEV,MAAM,IAAI,KAAK,CAAC,MAAA,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,mCAAI,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,QAAQ,IAAI,QAAQ,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,CAAC,aAAa,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACpE,IAAI,CACL,CACF,CAAC;SACH;KACF;SAAM;QACL,MAAM,SAAS,CAAC,iCAAiC,CAAC;YAChD,KAAK,EAAE,IAAI,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;YACzE,OAAO;YACP,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO;YAChB,OAAO;SACR,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;KAC1E;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;IACvC,IAAI,YAAY,CAAC,UAAU,KAAK,oBAAoB,EAAE;QACpD,MAAM,EACJ,EAAE,EACF,aAAa,GAEd,GAAG,YAAY,CAAC;QAGjB,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,aAAc,EAAE,CAAC;KAC9C;SAAM,IAAI,YAAY,CAAC,UAAU,KAAK,YAAY,EAAE;QAEnD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;KACxC;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;KAClE;AACH,CAAC;AAhGD,oEAgGC"}
1
+ {"version":3,"file":"loadSupergraphSdlFromStorage.js","sourceRoot":"","sources":["../src/loadSupergraphSdlFromStorage.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,13 @@
1
1
  import { fetch, Response, Request } from 'apollo-server-env';
2
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
- }
3
+ export declare function submitOutOfBandReportIfConfigured({ error, request, endpoint, response, startedAt, endedAt, tags, fetcher, }: {
4
+ error: Error;
5
+ request: Request;
6
+ endpoint: string | undefined;
7
+ response?: Response;
8
+ startedAt: Date;
9
+ endedAt: Date;
10
+ tags?: string[];
11
+ fetcher: typeof fetch;
12
+ }): Promise<void>;
15
13
  //# sourceMappingURL=outOfBandReporter.d.ts.map
@@ -1 +1 @@
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
+ {"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;AAiBF,wBAAsB,iCAAiC,CAAC,EACtD,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,GACR,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,KAAK,CAAC;CACvB,iBA6EA"}
@@ -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":";;;AAEA,+DAIsC;AAGzB,QAAA,0BAA0B,GAAgB;;;;CAItD,CAAC;AAEF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAcrD,MAAa,iBAAiB;IAG5B,KAAK,CAAC,iCAAiC,CAAC,EACtC,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,GASR;;QAGC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YAC/B,OAAO;SACR;QAED,IAAI,SAAoB,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE;YACb,SAAS,GAAG,wBAAS,CAAC,gBAAgB,CAAC;SACxC;aAAM;YAEL,QAAQ,QAAQ,CAAC,MAAM,EAAE;gBACvB,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACN,SAAS,GAAG,wBAAS,CAAC,WAAW,CAAC;oBAClC,MAAM;gBACR,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACN,SAAS,GAAG,wBAAS,CAAC,OAAO,CAAC;oBAC9B,MAAM;gBACR,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACN,SAAS,GAAG,wBAAS,CAAC,gBAAgB,CAAC;oBACvC,MAAM;gBACR;oBACE,SAAS,GAAG,wBAAS,CAAC,KAAK,CAAC;aAC/B;SACF;QAED,MAAM,YAAY,GAAuB,MAAM,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,EAAE,CAAA,CAAC;QAEhE,MAAM,SAAS,GAA+B;YAC5C,KAAK,EAAE;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE;iBAC3B;gBACD,QAAQ,EAAE,QAAQ;oBAChB,CAAC,CAAC;wBACE,cAAc,EAAE,QAAQ,CAAC,MAAM;wBAC/B,IAAI,EAAE,YAAY;qBACnB;oBACH,CAAC,CAAC,IAAI;gBACR,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;gBAClC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE;gBAC9B,IAAI,EAAE,IAAI;aACX;SACF,CAAC;QAEF,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE;gBAC5D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,kCAA0B;oBACjC,SAAS;iBACV,CAAC;gBACF,OAAO,EAAE;oBACP,2BAA2B,EAAE,IAAI;oBACjC,8BAA8B,EAAE,OAAO;oBACvC,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE;oBAClC,cAAc,EAAE,kBAAkB;iBACnC;aACF,CAAC,CAAC;YACH,MAAM,cAAc,GAA4B,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YACzE,IAAI,CAAC,CAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,0CAAE,WAAW,CAAA,EAAE;gBACtC,MAAM,IAAI,KAAK,CACb,uCAAuC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,CACtF,CAAC;aACH;SACF;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAA,CAAC,CAAC,OAAO,mCAAI,CAAC,EAAE,CAAC,CAAC;SAC1E;IACH,CAAC;;AAjGH,8CAkGC;AAjGQ,0BAAQ,GAAkB,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,IAAI,CAAC"}
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": "0.43.1",
3
+ "version": "0.45.0-alpha.1",
4
4
  "description": "Apollo Gateway",
5
5
  "author": "Apollo <packages@apollographql.com>",
6
6
  "main": "dist/index.js",
@@ -25,24 +25,24 @@
25
25
  "access": "public"
26
26
  },
27
27
  "dependencies": {
28
- "@apollo/core-schema": "^0.1.0",
29
- "@apollo/federation": "^0.33.6",
30
- "@apollo/query-planner": "^0.6.0",
28
+ "@apollo/core-schema": "^0.2.0",
29
+ "@apollo/federation": "^0.33.8",
30
+ "@apollo/query-planner": "^0.6.2-alpha.0",
31
31
  "@opentelemetry/api": "^1.0.1",
32
32
  "@types/node-fetch": "2.5.12",
33
- "apollo-graphql": "^0.9.3",
34
- "apollo-reporting-protobuf": "^0.8.0 || ^3.0.0",
33
+ "apollo-graphql": "^0.9.5",
34
+ "apollo-reporting-protobuf": "^0.8.0 || ^3.0.0 || ^3.3.0-alpha.0",
35
35
  "apollo-server-caching": "^0.7.0 || ^3.0.0",
36
- "apollo-server-core": "^2.23.0 || ^3.0.0",
36
+ "apollo-server-core": "^2.23.0 || ^3.0.0 || ^3.6.0-alpha.0",
37
37
  "apollo-server-env": "^3.0.0 || ^4.0.0",
38
38
  "apollo-server-errors": "^2.5.0 || ^3.0.0",
39
- "apollo-server-types": "^0.9.0 || ^3.0.0",
39
+ "apollo-server-types": "^0.9.0 || ^3.0.0 || ^3.5.0-alpha.0",
40
40
  "loglevel": "^1.6.1",
41
41
  "make-fetch-happen": "^8.0.0",
42
- "pretty-format": "^26.0.0"
42
+ "pretty-format": "^27.3.1"
43
43
  },
44
44
  "peerDependencies": {
45
- "graphql": "^15.5.3"
45
+ "graphql": "^15.7.2"
46
46
  },
47
- "gitHead": "c6112749b4a3d840713da9a597a8f47ef3b336f8"
47
+ "gitHead": "e6cc90bd8a12e62a5a982178fee7622089739f45"
48
48
  }
@@ -1,4 +1,5 @@
1
1
  export type Maybe<T> = T | null;
2
+ export type InputMaybe<T> = Maybe<T>;
2
3
  export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
3
4
  export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
4
5
  export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
@@ -17,15 +18,15 @@ export type ApiMonitoringReport = {
17
18
  endedAt: Scalars['Timestamp'];
18
19
  error: Error;
19
20
  request: Request;
20
- response?: Maybe<Response>;
21
+ response?: InputMaybe<Response>;
21
22
  startedAt: Scalars['Timestamp'];
22
23
  /** Tags can include things like version and package name */
23
- tags?: Maybe<Array<Scalars['String']>>;
24
+ tags?: InputMaybe<Array<Scalars['String']>>;
24
25
  };
25
26
 
26
27
  export type Error = {
27
28
  code: ErrorCode;
28
- message?: Maybe<Scalars['String']>;
29
+ message?: InputMaybe<Scalars['String']>;
29
30
  };
30
31
 
31
32
  export enum ErrorCode {
@@ -55,7 +56,7 @@ export enum FetchErrorCode {
55
56
 
56
57
  export type HttpHeader = {
57
58
  name: Scalars['String'];
58
- value?: Maybe<Scalars['String']>;
59
+ value?: InputMaybe<Scalars['String']>;
59
60
  };
60
61
 
61
62
  export type Message = {
@@ -77,7 +78,7 @@ export type Mutation = {
77
78
 
78
79
 
79
80
  export type MutationReportErrorArgs = {
80
- report?: Maybe<ApiMonitoringReport>;
81
+ report?: InputMaybe<ApiMonitoringReport>;
81
82
  };
82
83
 
83
84
  export type Query = {
@@ -90,19 +91,19 @@ export type Query = {
90
91
 
91
92
  export type QueryRouterConfigArgs = {
92
93
  apiKey: Scalars['String'];
94
+ ifAfterId?: InputMaybe<Scalars['ID']>;
93
95
  ref: Scalars['String'];
94
- unlessIdIn?: Maybe<Array<Scalars['ID']>>;
95
96
  };
96
97
 
97
98
  export type Request = {
98
- body?: Maybe<Scalars['String']>;
99
- headers?: Maybe<Array<HttpHeader>>;
99
+ body?: InputMaybe<Scalars['String']>;
100
+ headers?: InputMaybe<Array<HttpHeader>>;
100
101
  url: Scalars['String'];
101
102
  };
102
103
 
103
104
  export type Response = {
104
- body?: Maybe<Scalars['String']>;
105
- headers?: Maybe<Array<HttpHeader>>;
105
+ body?: InputMaybe<Scalars['String']>;
106
+ headers?: InputMaybe<Array<HttpHeader>>;
106
107
  httpStatusCode: Scalars['Int'];
107
108
  };
108
109
 
@@ -125,13 +126,14 @@ export type Unchanged = {
125
126
  export type SupergraphSdlQueryVariables = Exact<{
126
127
  apiKey: Scalars['String'];
127
128
  ref: Scalars['String'];
129
+ ifAfterId?: InputMaybe<Scalars['ID']>;
128
130
  }>;
129
131
 
130
132
 
131
133
  export type SupergraphSdlQuery = { __typename?: 'Query', routerConfig: { __typename: 'FetchError', code: FetchErrorCode, message: string } | { __typename: 'RouterConfigResult', id: string, supergraphSdl: string } | { __typename: 'Unchanged' } };
132
134
 
133
135
  export type OobReportMutationVariables = Exact<{
134
- input?: Maybe<ApiMonitoringReport>;
136
+ input?: InputMaybe<ApiMonitoringReport>;
135
137
  }>;
136
138
 
137
139
 
@@ -12,6 +12,7 @@ import { ApolloGateway } from '../..';
12
12
  import { Plugin, Config, Refs } from 'pretty-format';
13
13
  import { Report, Trace } from 'apollo-reporting-protobuf';
14
14
  import { fixtures } from 'apollo-federation-integration-testsuite';
15
+ import { nockAfterEach, nockBeforeEach } from '../nockAssertions';
15
16
 
16
17
  // Normalize specific fields that change often (eg timestamps) to static values,
17
18
  // to make snapshot testing viable. (If these helpers are more generally
@@ -89,7 +90,6 @@ describe('reporting', () => {
89
90
  let gatewayServer: ApolloServer;
90
91
  let gatewayUrl: string;
91
92
  let reportPromise: Promise<any>;
92
- let nockScope: nock.Scope;
93
93
 
94
94
  beforeEach(async () => {
95
95
  let reportResolver: (report: any) => void;
@@ -97,7 +97,8 @@ describe('reporting', () => {
97
97
  reportResolver = resolve;
98
98
  });
99
99
 
100
- nockScope = nock('https://usage-reporting.api.apollographql.com')
100
+ nockBeforeEach();
101
+ nock('https://usage-reporting.api.apollographql.com')
101
102
  .post('/api/ingress/traces')
102
103
  .reply(200, (_: any, requestBody: string) => {
103
104
  reportResolver(requestBody);
@@ -137,7 +138,8 @@ describe('reporting', () => {
137
138
  if (gatewayServer) {
138
139
  await gatewayServer.stop();
139
140
  }
140
- nockScope.done();
141
+
142
+ nockAfterEach();
141
143
  });
142
144
 
143
145
  it(`queries three services`, async () => {
@@ -7,7 +7,9 @@ import {
7
7
  mockSdlQuerySuccess,
8
8
  mockSupergraphSdlRequestSuccess,
9
9
  mockApolloConfig,
10
- mockCloudConfigUrl,
10
+ mockCloudConfigUrl1,
11
+ mockCloudConfigUrl2,
12
+ mockCloudConfigUrl3,
11
13
  } from './nockMocks';
12
14
  import { getTestingSupergraphSdl } from '../execution-utils';
13
15
  import { MockService } from './networkRequests.test';
@@ -110,8 +112,26 @@ describe('gateway configuration warnings', () => {
110
112
 
111
113
  gateway = new ApolloGateway({
112
114
  logger,
113
- // TODO(trevor:cloudconfig): remove
114
- schemaConfigDeliveryEndpoint: mockCloudConfigUrl,
115
+ uplinkEndpoints: [mockCloudConfigUrl1],
116
+ });
117
+
118
+ await gateway.load(mockApolloConfig);
119
+
120
+ await gateway.stop();
121
+
122
+ expect(logger.warn).not.toHaveBeenCalledWith(
123
+ expect.stringMatching(
124
+ /A local gateway configuration is overriding a managed federation configuration/,
125
+ ),
126
+ );
127
+ });
128
+
129
+ it('deprecated conflicting configurations are not warned about when absent', async () => {
130
+ mockSupergraphSdlRequestSuccess();
131
+
132
+ gateway = new ApolloGateway({
133
+ logger,
134
+ schemaConfigDeliveryEndpoint: mockCloudConfigUrl1,
115
135
  });
116
136
 
117
137
  await gateway.load(mockApolloConfig);
@@ -300,7 +320,6 @@ describe('gateway config / env behavior', () => {
300
320
  });
301
321
  });
302
322
 
303
- // TODO(trevor:cloudconfig): this behavior will be updated
304
323
  describe('schema config delivery endpoint configuration', () => {
305
324
  it('A code config overrides the env variable', async () => {
306
325
  cleanUp = mockedEnv({
@@ -309,28 +328,30 @@ describe('gateway config / env behavior', () => {
309
328
 
310
329
  gateway = new ApolloGateway({
311
330
  logger,
312
- schemaConfigDeliveryEndpoint: 'code-config',
331
+ uplinkEndpoints: [mockCloudConfigUrl1, mockCloudConfigUrl2, mockCloudConfigUrl3],
313
332
  });
314
333
 
315
- expect(gateway['schemaConfigDeliveryEndpoint']).toEqual(
316
- 'code-config',
334
+ expect(gateway['uplinkEndpoints']).toEqual(
335
+ [mockCloudConfigUrl1, mockCloudConfigUrl2, mockCloudConfigUrl3],
317
336
  );
318
337
 
319
338
  gateway = null;
320
339
  });
340
+ });
321
341
 
322
- it('A code config set to `null` takes precedence over an existing env variable', async () => {
342
+ describe('deprecated schema config delivery endpoint configuration', () => {
343
+ it('A code config overrides the env variable', async () => {
323
344
  cleanUp = mockedEnv({
324
345
  APOLLO_SCHEMA_CONFIG_DELIVERY_ENDPOINT: 'env-config',
325
346
  });
326
347
 
327
348
  gateway = new ApolloGateway({
328
349
  logger,
329
- schemaConfigDeliveryEndpoint: null,
350
+ schemaConfigDeliveryEndpoint: 'code-config',
330
351
  });
331
352
 
332
- expect(gateway['schemaConfigDeliveryEndpoint']).toEqual(
333
- null,
353
+ expect(gateway['uplinkEndpoints']).toEqual(
354
+ ['code-config'],
334
355
  );
335
356
 
336
357
  gateway = null;