@apollo/gateway 2.0.0-alpha.0 → 2.0.0-alpha.4
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.
- package/README.md +1 -1
- package/dist/__generated__/graphqlTypes.d.ts +13 -11
- package/dist/__generated__/graphqlTypes.d.ts.map +1 -1
- package/dist/__generated__/graphqlTypes.js.map +1 -1
- package/dist/config.d.ts +45 -24
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -31
- package/dist/config.js.map +1 -1
- package/dist/datasources/LocalGraphQLDataSource.js.map +1 -1
- package/dist/datasources/RemoteGraphQLDataSource.d.ts.map +1 -1
- package/dist/datasources/RemoteGraphQLDataSource.js +4 -1
- package/dist/datasources/RemoteGraphQLDataSource.js.map +1 -1
- package/dist/datasources/types.d.ts +1 -1
- package/dist/datasources/types.d.ts.map +1 -1
- package/dist/executeQueryPlan.d.ts.map +1 -1
- package/dist/executeQueryPlan.js +6 -6
- package/dist/executeQueryPlan.js.map +1 -1
- package/dist/index.d.ts +36 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +197 -297
- package/dist/index.js.map +1 -1
- package/dist/operationContext.js +0 -1
- package/dist/operationContext.js.map +1 -1
- package/dist/schema-helper/addResolversToSchema.d.ts +4 -0
- package/dist/schema-helper/addResolversToSchema.d.ts.map +1 -0
- package/dist/schema-helper/addResolversToSchema.js +62 -0
- package/dist/schema-helper/addResolversToSchema.js.map +1 -0
- package/dist/schema-helper/error.d.ts +6 -0
- package/dist/schema-helper/error.d.ts.map +1 -0
- package/dist/schema-helper/error.js +14 -0
- package/dist/schema-helper/error.js.map +1 -0
- package/dist/schema-helper/index.d.ts +4 -0
- package/dist/schema-helper/index.d.ts.map +1 -0
- package/dist/schema-helper/index.js +16 -0
- package/dist/schema-helper/index.js.map +1 -0
- package/dist/schema-helper/resolverMap.d.ts +16 -0
- package/dist/schema-helper/resolverMap.d.ts.map +1 -0
- package/dist/schema-helper/resolverMap.js +3 -0
- package/dist/schema-helper/resolverMap.js.map +1 -0
- package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts +31 -0
- package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts.map +1 -0
- package/dist/supergraphManagers/IntrospectAndCompose/index.js +112 -0
- package/dist/supergraphManagers/IntrospectAndCompose/index.js.map +1 -0
- package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts +12 -0
- package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts.map +1 -0
- package/dist/{loadServicesFromRemoteEndpoint.js → supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js} +6 -6
- package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js.map +1 -0
- package/dist/supergraphManagers/LegacyFetcher/index.d.ts +33 -0
- package/dist/supergraphManagers/LegacyFetcher/index.d.ts.map +1 -0
- package/dist/supergraphManagers/LegacyFetcher/index.js +149 -0
- package/dist/supergraphManagers/LegacyFetcher/index.js.map +1 -0
- package/dist/supergraphManagers/LocalCompose/index.d.ts +19 -0
- package/dist/supergraphManagers/LocalCompose/index.d.ts.map +1 -0
- package/dist/supergraphManagers/LocalCompose/index.js +55 -0
- package/dist/supergraphManagers/LocalCompose/index.js.map +1 -0
- package/dist/supergraphManagers/UplinkFetcher/index.d.ts +32 -0
- package/dist/supergraphManagers/UplinkFetcher/index.d.ts.map +1 -0
- package/dist/supergraphManagers/UplinkFetcher/index.js +96 -0
- package/dist/supergraphManagers/UplinkFetcher/index.js.map +1 -0
- package/dist/supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.d.ts +21 -0
- package/dist/supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.d.ts.map +1 -0
- package/dist/{loadSupergraphSdlFromStorage.js → supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.js} +41 -10
- package/dist/supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.js.map +1 -0
- package/dist/supergraphManagers/UplinkFetcher/outOfBandReporter.d.ts +13 -0
- package/dist/supergraphManagers/UplinkFetcher/outOfBandReporter.d.ts.map +1 -0
- package/dist/supergraphManagers/UplinkFetcher/outOfBandReporter.js +85 -0
- package/dist/supergraphManagers/UplinkFetcher/outOfBandReporter.js.map +1 -0
- package/dist/supergraphManagers/index.d.ts +5 -0
- package/dist/supergraphManagers/index.d.ts.map +1 -0
- package/dist/supergraphManagers/index.js +12 -0
- package/dist/supergraphManagers/index.js.map +1 -0
- package/dist/utilities/array.js +1 -1
- package/dist/utilities/array.js.map +1 -1
- package/dist/utilities/createHash.d.ts +2 -0
- package/dist/utilities/createHash.d.ts.map +1 -0
- package/dist/utilities/createHash.js +15 -0
- package/dist/utilities/createHash.js.map +1 -0
- package/dist/utilities/isNodeLike.d.ts +3 -0
- package/dist/utilities/isNodeLike.d.ts.map +1 -0
- package/dist/utilities/isNodeLike.js +8 -0
- package/dist/utilities/isNodeLike.js.map +1 -0
- package/package.json +9 -9
- package/src/__generated__/graphqlTypes.ts +13 -11
- package/src/__mocks__/make-fetch-happen-fetcher.ts +3 -1
- package/src/__tests__/buildQueryPlan.test.ts +1 -1
- package/src/__tests__/executeQueryPlan.test.ts +1171 -77
- package/src/__tests__/execution-utils.ts +5 -7
- package/src/__tests__/gateway/buildService.test.ts +3 -3
- package/src/__tests__/gateway/endToEnd.test.ts +1 -1
- package/src/__tests__/gateway/executor.test.ts +3 -1
- package/src/__tests__/gateway/lifecycle-hooks.test.ts +59 -121
- package/src/__tests__/gateway/opentelemetry.test.ts +8 -3
- package/src/__tests__/gateway/queryPlanCache.test.ts +25 -9
- package/src/__tests__/gateway/reporting.test.ts +42 -13
- package/src/__tests__/gateway/supergraphSdl.test.ts +397 -0
- package/src/__tests__/integration/aliases.test.ts +9 -3
- package/src/__tests__/integration/configuration.test.ts +140 -21
- package/src/__tests__/integration/logger.test.ts +2 -2
- package/src/__tests__/integration/networkRequests.test.ts +126 -149
- package/src/__tests__/integration/nockMocks.ts +57 -16
- package/src/__tests__/nockAssertions.ts +20 -0
- package/src/config.ts +153 -77
- package/src/core/__tests__/core.test.ts +6 -6
- package/src/datasources/LocalGraphQLDataSource.ts +1 -1
- package/src/datasources/RemoteGraphQLDataSource.ts +8 -2
- package/src/datasources/__tests__/LocalGraphQLDataSource.test.ts +1 -1
- package/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +4 -4
- package/src/datasources/types.ts +1 -1
- package/src/executeQueryPlan.ts +18 -9
- package/src/index.ts +323 -481
- package/src/make-fetch-happen.d.ts +1 -1
- package/src/operationContext.ts +2 -2
- package/src/schema-helper/addResolversToSchema.ts +83 -0
- package/src/schema-helper/error.ts +11 -0
- package/src/schema-helper/index.ts +3 -0
- package/src/schema-helper/resolverMap.ts +23 -0
- package/src/supergraphManagers/IntrospectAndCompose/__tests__/IntrospectAndCompose.test.ts +370 -0
- package/src/{__tests__ → supergraphManagers/IntrospectAndCompose/__tests__}/loadServicesFromRemoteEndpoint.test.ts +7 -7
- package/src/supergraphManagers/IntrospectAndCompose/__tests__/tsconfig.json +8 -0
- package/src/supergraphManagers/IntrospectAndCompose/index.ts +160 -0
- package/src/{loadServicesFromRemoteEndpoint.ts → supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.ts} +7 -7
- package/src/supergraphManagers/LegacyFetcher/index.ts +226 -0
- package/src/supergraphManagers/LocalCompose/index.ts +79 -0
- package/src/supergraphManagers/UplinkFetcher/__tests__/loadSupergraphSdlFromStorage.test.ts +343 -0
- package/src/supergraphManagers/UplinkFetcher/__tests__/tsconfig.json +8 -0
- package/src/supergraphManagers/UplinkFetcher/index.ts +128 -0
- package/src/{loadSupergraphSdlFromStorage.ts → supergraphManagers/UplinkFetcher/loadSupergraphSdlFromStorage.ts} +63 -14
- package/src/supergraphManagers/UplinkFetcher/outOfBandReporter.ts +126 -0
- package/src/supergraphManagers/index.ts +4 -0
- package/src/utilities/__tests__/cleanErrorOfInaccessibleElements.test.ts +13 -10
- package/src/utilities/array.ts +1 -1
- package/src/utilities/createHash.ts +10 -0
- package/src/utilities/isNodeLike.ts +11 -0
- package/CHANGELOG.md +0 -452
- package/dist/legacyLoadServicesFromStorage.d.ts +0 -20
- package/dist/legacyLoadServicesFromStorage.d.ts.map +0 -1
- package/dist/legacyLoadServicesFromStorage.js +0 -62
- package/dist/legacyLoadServicesFromStorage.js.map +0 -1
- package/dist/loadServicesFromRemoteEndpoint.d.ts +0 -13
- package/dist/loadServicesFromRemoteEndpoint.d.ts.map +0 -1
- package/dist/loadServicesFromRemoteEndpoint.js.map +0 -1
- package/dist/loadSupergraphSdlFromStorage.d.ts +0 -12
- package/dist/loadSupergraphSdlFromStorage.d.ts.map +0 -1
- package/dist/loadSupergraphSdlFromStorage.js.map +0 -1
- package/dist/outOfBandReporter.d.ts +0 -15
- package/dist/outOfBandReporter.d.ts.map +0 -1
- package/dist/outOfBandReporter.js +0 -88
- package/dist/outOfBandReporter.js.map +0 -1
- package/src/__tests__/gateway/composedSdl.test.ts +0 -44
- package/src/__tests__/integration/legacyNetworkRequests.test.ts +0 -279
- package/src/__tests__/integration/legacyNockMocks.ts +0 -113
- package/src/__tests__/loadSupergraphSdlFromStorage.test.ts +0 -664
- package/src/legacyLoadServicesFromStorage.ts +0 -170
- package/src/outOfBandReporter.ts +0 -128
|
@@ -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');
|
|
39
|
-
expect(request?.body).toEqual(
|
|
40
|
-
JSON.stringify({ query: '{me{username}}', variables: {} }),
|
|
41
|
-
);
|
|
42
|
-
await server.stop();
|
|
43
|
-
});
|
|
44
|
-
});
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import nock from 'nock';
|
|
2
|
-
import { fetch } from 'apollo-server-env';
|
|
3
|
-
import { Logger } from 'apollo-server-types';
|
|
4
|
-
import { ApolloGateway, GCS_RETRY_COUNT, getDefaultFetcher } from '../..';
|
|
5
|
-
import {
|
|
6
|
-
mockServiceHealthCheckSuccess,
|
|
7
|
-
mockServiceHealthCheck,
|
|
8
|
-
mockStorageSecretSuccess,
|
|
9
|
-
mockStorageSecret,
|
|
10
|
-
mockCompositionConfigLinkSuccess,
|
|
11
|
-
mockCompositionConfigLink,
|
|
12
|
-
mockCompositionConfigsSuccess,
|
|
13
|
-
mockCompositionConfigs,
|
|
14
|
-
mockImplementingServicesSuccess,
|
|
15
|
-
mockImplementingServices,
|
|
16
|
-
mockRawPartialSchemaSuccess,
|
|
17
|
-
mockRawPartialSchema,
|
|
18
|
-
apiKeyHash,
|
|
19
|
-
graphId,
|
|
20
|
-
} from './legacyNockMocks';
|
|
21
|
-
|
|
22
|
-
export interface MockService {
|
|
23
|
-
gcsDefinitionPath: string;
|
|
24
|
-
partialSchemaPath: string;
|
|
25
|
-
url: string;
|
|
26
|
-
sdl: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const service: MockService = {
|
|
30
|
-
gcsDefinitionPath: 'service-definition.json',
|
|
31
|
-
partialSchemaPath: 'accounts-partial-schema.json',
|
|
32
|
-
url: 'http://localhost:4001',
|
|
33
|
-
sdl: `#graphql
|
|
34
|
-
extend type Query {
|
|
35
|
-
me: User
|
|
36
|
-
everyone: [User]
|
|
37
|
-
}
|
|
38
|
-
"This is my User"
|
|
39
|
-
type User @key(fields: "id") {
|
|
40
|
-
id: ID!
|
|
41
|
-
name: String
|
|
42
|
-
username: String
|
|
43
|
-
}
|
|
44
|
-
`,
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const updatedService: MockService = {
|
|
48
|
-
gcsDefinitionPath: 'updated-service-definition.json',
|
|
49
|
-
partialSchemaPath: 'updated-accounts-partial-schema.json',
|
|
50
|
-
url: 'http://localhost:4002',
|
|
51
|
-
sdl: `#graphql
|
|
52
|
-
extend type Query {
|
|
53
|
-
me: User
|
|
54
|
-
everyone: [User]
|
|
55
|
-
}
|
|
56
|
-
"This is my updated User"
|
|
57
|
-
type User @key(fields: "id") {
|
|
58
|
-
id: ID!
|
|
59
|
-
name: String
|
|
60
|
-
username: String
|
|
61
|
-
}
|
|
62
|
-
`,
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
let fetcher: typeof fetch;
|
|
66
|
-
let logger: Logger;
|
|
67
|
-
let gateway: ApolloGateway | null = null;
|
|
68
|
-
|
|
69
|
-
beforeEach(() => {
|
|
70
|
-
if (!nock.isActive()) nock.activate();
|
|
71
|
-
|
|
72
|
-
fetcher = getDefaultFetcher().defaults({
|
|
73
|
-
retry: {
|
|
74
|
-
retries: GCS_RETRY_COUNT,
|
|
75
|
-
minTimeout: 0,
|
|
76
|
-
maxTimeout: 0,
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
const warn = jest.fn();
|
|
81
|
-
const debug = jest.fn();
|
|
82
|
-
const error = jest.fn();
|
|
83
|
-
const info = jest.fn();
|
|
84
|
-
|
|
85
|
-
logger = {
|
|
86
|
-
warn,
|
|
87
|
-
debug,
|
|
88
|
-
error,
|
|
89
|
-
info,
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
afterEach(async () => {
|
|
94
|
-
expect(nock.isDone()).toBeTruthy();
|
|
95
|
-
nock.cleanAll();
|
|
96
|
-
nock.restore();
|
|
97
|
-
if (gateway) {
|
|
98
|
-
await gateway.stop();
|
|
99
|
-
gateway = null;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('Extracts service definitions from remote storage', async () => {
|
|
104
|
-
mockStorageSecretSuccess();
|
|
105
|
-
mockCompositionConfigLinkSuccess();
|
|
106
|
-
mockCompositionConfigsSuccess([service]);
|
|
107
|
-
mockImplementingServicesSuccess(service);
|
|
108
|
-
mockRawPartialSchemaSuccess(service);
|
|
109
|
-
|
|
110
|
-
gateway = new ApolloGateway({ logger, schemaConfigDeliveryEndpoint: null });
|
|
111
|
-
|
|
112
|
-
await gateway.load({
|
|
113
|
-
apollo: { keyHash: apiKeyHash, graphId, graphVariant: 'current' },
|
|
114
|
-
});
|
|
115
|
-
expect(gateway.schema!.getType('User')!.description).toBe('This is my User');
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
function failNTimes(n: number, fn: () => nock.Interceptor) {
|
|
119
|
-
for (let i = 0; i < n; i++) {
|
|
120
|
-
fn().reply(500);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
it(`Retries GCS (up to ${GCS_RETRY_COUNT} times) on failure for each request and succeeds`, async () => {
|
|
125
|
-
failNTimes(GCS_RETRY_COUNT, mockStorageSecret);
|
|
126
|
-
mockStorageSecretSuccess();
|
|
127
|
-
|
|
128
|
-
failNTimes(GCS_RETRY_COUNT, mockCompositionConfigLink);
|
|
129
|
-
mockCompositionConfigLinkSuccess();
|
|
130
|
-
|
|
131
|
-
failNTimes(GCS_RETRY_COUNT, mockCompositionConfigs);
|
|
132
|
-
mockCompositionConfigsSuccess([service]);
|
|
133
|
-
|
|
134
|
-
failNTimes(GCS_RETRY_COUNT, () => mockImplementingServices(service));
|
|
135
|
-
mockImplementingServicesSuccess(service);
|
|
136
|
-
|
|
137
|
-
failNTimes(GCS_RETRY_COUNT, () => mockRawPartialSchema(service));
|
|
138
|
-
mockRawPartialSchemaSuccess(service);
|
|
139
|
-
|
|
140
|
-
gateway = new ApolloGateway({
|
|
141
|
-
fetcher,
|
|
142
|
-
logger,
|
|
143
|
-
schemaConfigDeliveryEndpoint: null,
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
await gateway.load({
|
|
147
|
-
apollo: { keyHash: apiKeyHash, graphId, graphVariant: 'current' },
|
|
148
|
-
});
|
|
149
|
-
expect(gateway.schema!.getType('User')!.description).toBe('This is my User');
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
describe('Managed mode', () => {
|
|
153
|
-
it('Performs health checks to downstream services on load', async () => {
|
|
154
|
-
mockStorageSecretSuccess();
|
|
155
|
-
mockCompositionConfigLinkSuccess();
|
|
156
|
-
mockCompositionConfigsSuccess([service]);
|
|
157
|
-
mockImplementingServicesSuccess(service);
|
|
158
|
-
mockRawPartialSchemaSuccess(service);
|
|
159
|
-
|
|
160
|
-
mockServiceHealthCheckSuccess(service);
|
|
161
|
-
|
|
162
|
-
gateway = new ApolloGateway({
|
|
163
|
-
serviceHealthCheck: true,
|
|
164
|
-
logger,
|
|
165
|
-
schemaConfigDeliveryEndpoint: null,
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
await gateway.load({
|
|
169
|
-
apollo: { keyHash: apiKeyHash, graphId, graphVariant: 'current' },
|
|
170
|
-
});
|
|
171
|
-
expect(gateway.schema!.getType('User')!.description).toBe(
|
|
172
|
-
'This is my User',
|
|
173
|
-
);
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('Rejects on initial load when health check fails', async () => {
|
|
177
|
-
mockStorageSecretSuccess();
|
|
178
|
-
mockCompositionConfigLinkSuccess();
|
|
179
|
-
mockCompositionConfigsSuccess([service]);
|
|
180
|
-
mockImplementingServicesSuccess(service);
|
|
181
|
-
mockRawPartialSchemaSuccess(service);
|
|
182
|
-
|
|
183
|
-
mockServiceHealthCheck(service).reply(500);
|
|
184
|
-
|
|
185
|
-
const gateway = new ApolloGateway({
|
|
186
|
-
serviceHealthCheck: true,
|
|
187
|
-
logger,
|
|
188
|
-
schemaConfigDeliveryEndpoint: null,
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
await expect(
|
|
192
|
-
gateway.load({
|
|
193
|
-
apollo: { keyHash: apiKeyHash, graphId, graphVariant: 'current' },
|
|
194
|
-
}),
|
|
195
|
-
).rejects.toThrowErrorMatchingInlineSnapshot(`
|
|
196
|
-
"The gateway did not update its schema due to failed service health checks. The gateway will continue to operate with the previous schema and reattempt updates. The following error occurred during the health check:
|
|
197
|
-
[accounts]: 500: Internal Server Error"
|
|
198
|
-
`);
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
it('Preserves original schema when health check fails', async () => {
|
|
202
|
-
mockStorageSecretSuccess();
|
|
203
|
-
mockCompositionConfigLinkSuccess();
|
|
204
|
-
mockCompositionConfigsSuccess([service]);
|
|
205
|
-
mockImplementingServicesSuccess(service);
|
|
206
|
-
mockRawPartialSchemaSuccess(service);
|
|
207
|
-
mockServiceHealthCheckSuccess(service);
|
|
208
|
-
|
|
209
|
-
// Update
|
|
210
|
-
mockStorageSecretSuccess();
|
|
211
|
-
mockCompositionConfigLinkSuccess();
|
|
212
|
-
mockCompositionConfigsSuccess([updatedService]);
|
|
213
|
-
mockImplementingServicesSuccess(updatedService);
|
|
214
|
-
mockRawPartialSchemaSuccess(updatedService);
|
|
215
|
-
mockServiceHealthCheck(updatedService).reply(500);
|
|
216
|
-
|
|
217
|
-
let resolve: () => void;
|
|
218
|
-
const schemaChangeBlocker = new Promise<void>((res) => (resolve = res));
|
|
219
|
-
|
|
220
|
-
gateway = new ApolloGateway({
|
|
221
|
-
serviceHealthCheck: true,
|
|
222
|
-
logger,
|
|
223
|
-
schemaConfigDeliveryEndpoint: null,
|
|
224
|
-
});
|
|
225
|
-
// @ts-ignore for testing purposes, a short pollInterval is ideal so we'll override here
|
|
226
|
-
gateway.experimental_pollInterval = 100;
|
|
227
|
-
|
|
228
|
-
// @ts-ignore for testing purposes, we'll call the original `updateSchema`
|
|
229
|
-
// function from our mock. The first call should mimic original behavior,
|
|
230
|
-
// but the second call needs to handle the PromiseRejection. Typically for tests
|
|
231
|
-
// like these we would leverage the `gateway.onSchemaChange` callback to drive
|
|
232
|
-
// the test, but in this case, that callback isn't triggered when the update
|
|
233
|
-
// fails (as expected) so we get creative with the second mock as seen below.
|
|
234
|
-
const original = gateway.updateSchema;
|
|
235
|
-
const mockUpdateSchema = jest
|
|
236
|
-
.fn()
|
|
237
|
-
.mockImplementationOnce(async () => {
|
|
238
|
-
await original.apply(gateway);
|
|
239
|
-
})
|
|
240
|
-
.mockImplementationOnce(async () => {
|
|
241
|
-
// mock the first poll and handle the error which would otherwise be caught
|
|
242
|
-
// and logged from within the `pollServices` class method
|
|
243
|
-
try {
|
|
244
|
-
await original.apply(gateway);
|
|
245
|
-
} catch (e) {
|
|
246
|
-
var err = e;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
expect(err.message).toMatchInlineSnapshot(`
|
|
250
|
-
"The gateway did not update its schema due to failed service health checks. The gateway will continue to operate with the previous schema and reattempt updates. The following error occurred during the health check:
|
|
251
|
-
[accounts]: 500: Internal Server Error"
|
|
252
|
-
`);
|
|
253
|
-
// finally resolve the promise which drives this test
|
|
254
|
-
resolve();
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
// @ts-ignore for testing purposes, replace the `updateSchema`
|
|
258
|
-
// function on the gateway with our mock
|
|
259
|
-
gateway.updateSchema = mockUpdateSchema;
|
|
260
|
-
|
|
261
|
-
// load the gateway as usual
|
|
262
|
-
await gateway.load({
|
|
263
|
-
apollo: { keyHash: apiKeyHash, graphId, graphVariant: 'current' },
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
expect(gateway.schema!.getType('User')!.description).toBe(
|
|
267
|
-
'This is my User',
|
|
268
|
-
);
|
|
269
|
-
|
|
270
|
-
await schemaChangeBlocker;
|
|
271
|
-
|
|
272
|
-
// At this point, the mock update should have been called but the schema
|
|
273
|
-
// should not have updated to the new one.
|
|
274
|
-
expect(mockUpdateSchema.mock.calls.length).toBe(2);
|
|
275
|
-
expect(gateway.schema!.getType('User')!.description).toBe(
|
|
276
|
-
'This is my User',
|
|
277
|
-
);
|
|
278
|
-
});
|
|
279
|
-
});
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { HEALTH_CHECK_QUERY, SERVICE_DEFINITION_QUERY } from '@apollo/gateway';
|
|
2
|
-
import nock from 'nock';
|
|
3
|
-
import { MockService } from './legacyNetworkRequests.test';
|
|
4
|
-
|
|
5
|
-
export const graphId = 'federated-service';
|
|
6
|
-
export const apiKeyHash = 'dd55a79d467976346d229a7b12b673ce';
|
|
7
|
-
const storageSecret = 'my-storage-secret';
|
|
8
|
-
const accountsService = 'accounts';
|
|
9
|
-
|
|
10
|
-
// Service mocks
|
|
11
|
-
function mockSdlQuery({ url }: MockService) {
|
|
12
|
-
return nock(url).post('/', {
|
|
13
|
-
query: SERVICE_DEFINITION_QUERY,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function mockSdlQuerySuccess(service: MockService) {
|
|
18
|
-
mockSdlQuery(service).reply(200, {
|
|
19
|
-
data: { _service: { sdl: service.sdl } },
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function mockServiceHealthCheck({ url }: MockService) {
|
|
24
|
-
return nock(url).post('/', {
|
|
25
|
-
query: HEALTH_CHECK_QUERY,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function mockServiceHealthCheckSuccess(service: MockService) {
|
|
30
|
-
return mockServiceHealthCheck(service).reply(200, {
|
|
31
|
-
data: { __typename: 'Query' },
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// GCS mocks
|
|
36
|
-
function gcsNock(url: Parameters<typeof nock>[0]): nock.Scope {
|
|
37
|
-
const { name, version } = require('../../../package.json');
|
|
38
|
-
return nock(url, {
|
|
39
|
-
reqheaders: {
|
|
40
|
-
'apollographql-client-name': name,
|
|
41
|
-
'apollographql-client-version': version,
|
|
42
|
-
'user-agent': `${name}/${version}`,
|
|
43
|
-
'content-type': 'application/json',
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function mockStorageSecret() {
|
|
49
|
-
return gcsNock('https://storage-secrets.api.apollographql.com:443').get(
|
|
50
|
-
`/${graphId}/storage-secret/${apiKeyHash}.json`,
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function mockStorageSecretSuccess() {
|
|
55
|
-
return gcsNock('https://storage-secrets.api.apollographql.com:443')
|
|
56
|
-
.get(`/${graphId}/storage-secret/${apiKeyHash}.json`)
|
|
57
|
-
.reply(200, `"${storageSecret}"`);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// get composition config link, using received storage secret
|
|
61
|
-
export function mockCompositionConfigLink() {
|
|
62
|
-
return gcsNock('https://federation.api.apollographql.com:443').get(
|
|
63
|
-
`/${storageSecret}/current/v1/composition-config-link`,
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export function mockCompositionConfigLinkSuccess() {
|
|
68
|
-
return mockCompositionConfigLink().reply(200, {
|
|
69
|
-
configPath: `${storageSecret}/current/v1/composition-configs/composition-config-path.json`,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// get composition configs, using received composition config link
|
|
74
|
-
export function mockCompositionConfigs() {
|
|
75
|
-
return gcsNock('https://federation.api.apollographql.com:443').get(
|
|
76
|
-
`/${storageSecret}/current/v1/composition-configs/composition-config-path.json`,
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export function mockCompositionConfigsSuccess(services: MockService[]) {
|
|
81
|
-
return mockCompositionConfigs().reply(200, {
|
|
82
|
-
implementingServiceLocations: services.map((service) => ({
|
|
83
|
-
name: accountsService,
|
|
84
|
-
path: `${storageSecret}/current/v1/implementing-services/${accountsService}/${service.gcsDefinitionPath}`,
|
|
85
|
-
})),
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// get implementing service reference, using received composition-config
|
|
90
|
-
export function mockImplementingServices({ gcsDefinitionPath }: MockService) {
|
|
91
|
-
return gcsNock('https://federation.api.apollographql.com:443').get(
|
|
92
|
-
`/${storageSecret}/current/v1/implementing-services/${accountsService}/${gcsDefinitionPath}`,
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export function mockImplementingServicesSuccess(service: MockService) {
|
|
97
|
-
return mockImplementingServices(service).reply(200, {
|
|
98
|
-
name: accountsService,
|
|
99
|
-
partialSchemaPath: `${storageSecret}/current/raw-partial-schemas/${service.partialSchemaPath}`,
|
|
100
|
-
url: service.url,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// get raw-partial-schema, using received composition-config
|
|
105
|
-
export function mockRawPartialSchema({ partialSchemaPath }: MockService) {
|
|
106
|
-
return gcsNock('https://federation.api.apollographql.com:443').get(
|
|
107
|
-
`/${storageSecret}/current/raw-partial-schemas/${partialSchemaPath}`,
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export function mockRawPartialSchemaSuccess(service: MockService) {
|
|
112
|
-
return mockRawPartialSchema(service).reply(200, service.sdl);
|
|
113
|
-
}
|