wgc 0.126.2 → 0.127.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.
- package/dist/e2e/smoke.test.js +2 -2
- package/dist/e2e/smoke.test.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/commands/auth/utils.d.ts +2 -0
- package/dist/src/commands/auth/utils.js.map +1 -1
- package/dist/src/commands/graph/federated-graph/commands/fetch.js +50 -14
- package/dist/src/commands/graph/federated-graph/commands/fetch.js.map +1 -1
- package/dist/src/commands/graph/federated-graph/utils.d.ts +0 -5
- package/dist/src/commands/graph/federated-graph/utils.js +1 -37
- package/dist/src/commands/graph/federated-graph/utils.js.map +1 -1
- package/dist/src/commands/mcp/tools/federated-graph-tools.js +4 -3
- package/dist/src/commands/mcp/tools/federated-graph-tools.js.map +1 -1
- package/dist/src/commands/router/commands/compose.d.ts +1 -1
- package/dist/src/commands/router/commands/compose.js +92 -36
- package/dist/src/commands/router/commands/compose.js.map +1 -1
- package/dist/src/commands/router/commands/fetch.d.ts +0 -1
- package/dist/src/commands/router/commands/fetch.js +70 -67
- package/dist/src/commands/router/commands/fetch.js.map +1 -1
- package/dist/src/commands/router/commands/types/params.d.ts +9 -0
- package/dist/src/commands/router/commands/types/params.js +2 -0
- package/dist/src/commands/router/commands/types/params.js.map +1 -0
- package/dist/src/commands/router/commands/types/types.d.ts +73 -0
- package/dist/src/commands/router/commands/types/types.js +2 -0
- package/dist/src/commands/router/commands/types/types.js.map +1 -0
- package/dist/src/commands/router/types/params.d.ts +7 -0
- package/dist/src/commands/router/types/params.js +2 -0
- package/dist/src/commands/router/types/params.js.map +1 -0
- package/dist/src/commands/router/types/types.d.ts +6 -0
- package/dist/src/commands/router/types/types.js +2 -0
- package/dist/src/commands/router/types/types.js.map +1 -0
- package/dist/src/commands/router/utils.d.ts +9 -0
- package/dist/src/commands/router/utils.js +121 -0
- package/dist/src/commands/router/utils.js.map +1 -0
- package/dist/test/graph/federated-graph/fetch.test.d.ts +1 -0
- package/dist/test/graph/federated-graph/fetch.test.js +107 -0
- package/dist/test/graph/federated-graph/fetch.test.js.map +1 -0
- package/dist/test/graph/federated-graph/recompose.test.js +1 -1
- package/dist/test/graph/federated-graph/recompose.test.js.map +1 -1
- package/dist/test/router/compose.test.d.ts +1 -0
- package/dist/test/router/compose.test.js +58 -0
- package/dist/test/router/compose.test.js.map +1 -0
- package/dist/test/router/fetch.test.d.ts +1 -0
- package/dist/test/router/fetch.test.js +101 -0
- package/dist/test/router/fetch.test.js.map +1 -0
- package/dist/test/router/utils.d.ts +7 -0
- package/dist/test/router/utils.js +62 -0
- package/dist/test/router/utils.js.map +1 -0
- package/dist/test/router/utils.test.d.ts +1 -0
- package/dist/test/router/utils.test.js +28 -0
- package/dist/test/router/utils.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
package/dist/e2e/smoke.test.js
CHANGED
|
@@ -16,7 +16,7 @@ describe('Bun CLI', () => {
|
|
|
16
16
|
test('bun cli should compose a router execution config', async () => {
|
|
17
17
|
const { stdout, stderr, exitCode } = await $ `${binPath} router compose -i ../demo/graph-no-edg.yaml -o e2e/config.json`.quiet();
|
|
18
18
|
expect(exitCode, `exited with non-zero:\nstdout:\n${stdout.toString()}\n\nstderr:\n${stderr.toString()}`).toBe(0);
|
|
19
|
-
expect(stdout.toString()).toContain('Router config successfully written');
|
|
19
|
+
expect(stdout.toString()).toContain('Router execution config successfully written to');
|
|
20
20
|
});
|
|
21
21
|
});
|
|
22
22
|
describe('Node CLI', () => {
|
|
@@ -32,7 +32,7 @@ describe('Node CLI', () => {
|
|
|
32
32
|
test('node cli should compose a router execution config', async () => {
|
|
33
33
|
const { stdout, stderr, exitCode } = await $ `node ${binPath} router compose -i ../demo/graph-no-edg.yaml -o e2e/config.json`.quiet();
|
|
34
34
|
expect(exitCode, `exited with non-zero:\nstdout:\n${stdout.toString()}\n\nstderr:\n${stderr.toString()}`).toBe(0);
|
|
35
|
-
expect(stdout.toString()).toContain('Router config successfully written');
|
|
35
|
+
expect(stdout.toString()).toContain('Router execution config successfully written to');
|
|
36
36
|
});
|
|
37
37
|
});
|
|
38
38
|
//# sourceMappingURL=smoke.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smoke.test.js","sourceRoot":"","sources":["../../e2e/smoke.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEhE,CAAC,CAAC,OAAO,EAAE,CAAC;AAEZ,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC;IAExB,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAA,GAAG,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QAEpE,MAAM,CAAC,QAAQ,EAAE,mCAAmC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAChC,MAAM,CAAC,CAAA,GAAG,OAAO,iEAAiE,CAAC,KAAK,EAAE,CAAC;QAE7F,MAAM,CAAC,QAAQ,EAAE,mCAAmC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"smoke.test.js","sourceRoot":"","sources":["../../e2e/smoke.test.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -16,11 +16,13 @@ export interface KeycloakTokenResponse {
|
|
|
16
16
|
expires_in: number;
|
|
17
17
|
refresh_expires_in: number;
|
|
18
18
|
}
|
|
19
|
+
export type GraphTokenFeature = 'split-config-loading';
|
|
19
20
|
export interface GraphToken {
|
|
20
21
|
iss?: string;
|
|
21
22
|
iat?: number;
|
|
22
23
|
federated_graph_id: string;
|
|
23
24
|
organization_id: string;
|
|
25
|
+
features?: GraphTokenFeature[];
|
|
24
26
|
}
|
|
25
27
|
export interface DecodedAccessToken {
|
|
26
28
|
iss?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/commands/auth/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/commands/auth/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { mkdir, readdir, writeFile } from 'node:fs/promises';
|
|
2
3
|
import { Command } from 'commander';
|
|
3
4
|
import yaml from 'js-yaml';
|
|
4
5
|
import { join, resolve } from 'pathe';
|
|
5
6
|
import pc from 'picocolors';
|
|
6
|
-
import {
|
|
7
|
+
import { getFederatedGraphSchemas, getSubgraphSDL, getSubgraphsOfFedGraph } from '../utils.js';
|
|
8
|
+
import { featureFlagsDir, fetchRouterConfig, writeFeatureFlagConfigToFile } from '../../../router/utils.js';
|
|
9
|
+
const cosmoConfigFile = 'cosmoConfig.json';
|
|
10
|
+
const cosmoMapperFile = 'cosmo-mapper.json';
|
|
11
|
+
const cosmoSchemaFile = 'cosmoSchema.graphql';
|
|
12
|
+
const cosmoClientSchemaFile = 'cosmoClientSchema.graphql';
|
|
13
|
+
const cosmoCompositionFile = 'cosmo-composition.yaml';
|
|
14
|
+
const roverCompositionFile = 'rover-composition.yaml';
|
|
15
|
+
const apolloSchemaFile = 'apolloSchema.graphql';
|
|
16
|
+
const apolloScriptFile = 'apollo.sh';
|
|
7
17
|
export default (opts) => {
|
|
8
18
|
const cmd = new Command('fetch');
|
|
9
19
|
cmd.description('Fetches the schemas of the federated graph, all of its subgraphs and the router config.');
|
|
@@ -13,34 +23,59 @@ export default (opts) => {
|
|
|
13
23
|
cmd.option('-a, --apollo-compatibility', 'Enable apollo compatibility to generate the composition configs and script to generate schema using rover.');
|
|
14
24
|
cmd.option('-v, --federation-version [string]', 'The version of federation to be used by rover in the format "1", "2", or "2.x.y". Default is 2.5.0.');
|
|
15
25
|
cmd.action(async (name, options) => {
|
|
26
|
+
var _a;
|
|
16
27
|
try {
|
|
17
28
|
const fedGraphSchemas = await getFederatedGraphSchemas({
|
|
18
29
|
client: opts.client,
|
|
19
30
|
name,
|
|
20
31
|
namespace: options.namespace,
|
|
21
32
|
});
|
|
22
|
-
|
|
33
|
+
let basePath = options.out ? resolve(options.out) : resolve();
|
|
34
|
+
basePath = join(basePath, `${name}-${options.namespace || 'default'}`);
|
|
35
|
+
if (!existsSync(basePath)) {
|
|
36
|
+
await mkdir(basePath, { recursive: true });
|
|
37
|
+
}
|
|
38
|
+
const entries = await readdir(basePath);
|
|
39
|
+
if (entries.length > 0) {
|
|
40
|
+
console.log(pc.red(`Output directory "${basePath}" is not empty. Please provide an empty directory path.`));
|
|
41
|
+
process.exitCode = 1;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
23
44
|
const superGraphPath = join(basePath, '/supergraph/');
|
|
24
45
|
const subgraphPath = join(basePath, '/subgraphs/');
|
|
25
46
|
const scriptsPath = join(basePath, '/scripts/');
|
|
26
47
|
if (!existsSync(superGraphPath)) {
|
|
27
|
-
|
|
48
|
+
await mkdir(superGraphPath, { recursive: true });
|
|
28
49
|
}
|
|
29
50
|
if (!existsSync(subgraphPath)) {
|
|
30
|
-
|
|
51
|
+
await mkdir(subgraphPath, { recursive: true });
|
|
31
52
|
}
|
|
32
53
|
if (!existsSync(scriptsPath) && options.apolloCompatibility) {
|
|
33
|
-
|
|
54
|
+
await mkdir(scriptsPath, { recursive: true });
|
|
34
55
|
}
|
|
35
56
|
const routerConfig = await fetchRouterConfig({
|
|
36
57
|
client: opts.client,
|
|
37
58
|
name,
|
|
38
59
|
namespace: options.namespace,
|
|
39
60
|
});
|
|
40
|
-
|
|
41
|
-
|
|
61
|
+
await writeFile(join(superGraphPath, cosmoConfigFile), routerConfig.routerConfig);
|
|
62
|
+
if (routerConfig.mapper) {
|
|
63
|
+
// The mapper file is only available when `split-config-loading` is enabled
|
|
64
|
+
await writeFile(join(basePath, cosmoMapperFile), JSON.stringify(routerConfig.mapper));
|
|
65
|
+
}
|
|
66
|
+
if ((_a = routerConfig.featureFlags) === null || _a === void 0 ? void 0 : _a.size) {
|
|
67
|
+
// Same as the mapper, feature flags are only available when `split-config-loading` is enabled
|
|
68
|
+
const featureFlagsPath = join(basePath, featureFlagsDir);
|
|
69
|
+
if (!existsSync(featureFlagsPath)) {
|
|
70
|
+
await mkdir(featureFlagsPath);
|
|
71
|
+
}
|
|
72
|
+
for (const [featureFlagName, featureFlagConfig] of routerConfig.featureFlags) {
|
|
73
|
+
await writeFeatureFlagConfigToFile(featureFlagsPath, featureFlagName, featureFlagConfig);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
await writeFile(join(superGraphPath, cosmoSchemaFile), fedGraphSchemas.sdl);
|
|
42
77
|
if (fedGraphSchemas.clientSchema) {
|
|
43
|
-
|
|
78
|
+
await writeFile(join(superGraphPath, cosmoClientSchemaFile), fedGraphSchemas.clientSchema);
|
|
44
79
|
}
|
|
45
80
|
const subgraphs = await getSubgraphsOfFedGraph({ client: opts.client, name, namespace: options.namespace });
|
|
46
81
|
const cosmoSubgraphsConfig = [];
|
|
@@ -86,13 +121,13 @@ export default (opts) => {
|
|
|
86
121
|
};
|
|
87
122
|
}
|
|
88
123
|
}
|
|
89
|
-
|
|
124
|
+
await writeFile(filePath, subgraphSDL);
|
|
90
125
|
}
|
|
91
126
|
const cosmoCompositionConfig = yaml.dump({
|
|
92
127
|
version: 1,
|
|
93
128
|
subgraphs: cosmoSubgraphsConfig,
|
|
94
129
|
});
|
|
95
|
-
|
|
130
|
+
await writeFile(join(basePath, cosmoCompositionFile), cosmoCompositionConfig);
|
|
96
131
|
if (options.apolloCompatibility) {
|
|
97
132
|
const roverCompositionConfig = yaml.dump({
|
|
98
133
|
federation_version: `${options.federationVersion &&
|
|
@@ -112,11 +147,12 @@ export default (opts) => {
|
|
|
112
147
|
},
|
|
113
148
|
},
|
|
114
149
|
});
|
|
115
|
-
|
|
150
|
+
const absRoverCompositionFile = join(basePath, roverCompositionFile);
|
|
151
|
+
await writeFile(absRoverCompositionFile, roverCompositionConfig);
|
|
116
152
|
const apolloScript = `npm install -g @apollo/rover
|
|
117
|
-
rover supergraph compose --config '${
|
|
153
|
+
rover supergraph compose --config '${absRoverCompositionFile}' --output '${join(superGraphPath, apolloSchemaFile)}'
|
|
118
154
|
`;
|
|
119
|
-
|
|
155
|
+
await writeFile(join(scriptsPath, apolloScriptFile), apolloScript);
|
|
120
156
|
}
|
|
121
157
|
console.log(pc.green(`Successfully fetched the schemas of the federated graph, all its subgraphs and the router config of the federated graph ${pc.bold(name)}.`));
|
|
122
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../../src/commands/graph/federated-graph/commands/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../../src/commands/graph/federated-graph/commands/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import { Client } from '../../../core/client/client.js';
|
|
2
|
-
export declare const fetchRouterConfig: ({ client, name, namespace, }: {
|
|
3
|
-
client: Client;
|
|
4
|
-
name: string;
|
|
5
|
-
namespace?: string;
|
|
6
|
-
}) => Promise<string>;
|
|
7
2
|
export interface Subgraph {
|
|
8
3
|
name: string;
|
|
9
4
|
routingURL: string;
|
|
@@ -1,42 +1,6 @@
|
|
|
1
1
|
import { EnumStatusCode } from '@wundergraph/cosmo-connect/dist/common/common_pb';
|
|
2
|
-
import { program } from 'commander';
|
|
3
|
-
import jwtDecode from 'jwt-decode';
|
|
4
2
|
import pc from 'picocolors';
|
|
5
|
-
import {
|
|
6
|
-
export const fetchRouterConfig = async ({ client, name, namespace, }) => {
|
|
7
|
-
var _a, _b;
|
|
8
|
-
const resp = await client.platform.generateRouterToken({
|
|
9
|
-
fedGraphName: name,
|
|
10
|
-
namespace,
|
|
11
|
-
}, {
|
|
12
|
-
headers: getBaseHeaders(),
|
|
13
|
-
});
|
|
14
|
-
if (((_a = resp.response) === null || _a === void 0 ? void 0 : _a.code) !== EnumStatusCode.OK) {
|
|
15
|
-
throw new Error(`${pc.red(`Could not fetch the router config for the graph ${pc.bold(name)}`)} \n${pc.red(pc.bold(((_b = resp.response) === null || _b === void 0 ? void 0 : _b.details) || ''))}`);
|
|
16
|
-
}
|
|
17
|
-
let decoded;
|
|
18
|
-
try {
|
|
19
|
-
decoded = jwtDecode(resp.token);
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
program.error('Could not fetch the router config. Please try again');
|
|
23
|
-
}
|
|
24
|
-
const requestBody = JSON.stringify({
|
|
25
|
-
Version: '',
|
|
26
|
-
});
|
|
27
|
-
const headers = new Headers();
|
|
28
|
-
headers.append('Content-Type', 'application/json; charset=UTF-8');
|
|
29
|
-
headers.append('Authorization', 'Bearer ' + resp.token);
|
|
30
|
-
headers.append('Accept-Encoding', 'gzip');
|
|
31
|
-
const url = new URL(`/${decoded.organization_id}/${decoded.federated_graph_id}/routerconfigs/latest.json`, config.cdnURL);
|
|
32
|
-
const response = await fetch(url, {
|
|
33
|
-
method: 'POST',
|
|
34
|
-
headers,
|
|
35
|
-
body: requestBody,
|
|
36
|
-
});
|
|
37
|
-
const routerConfig = await response.text();
|
|
38
|
-
return routerConfig;
|
|
39
|
-
};
|
|
3
|
+
import { getBaseHeaders } from '../../../core/config.js';
|
|
40
4
|
export const getSubgraphsOfFedGraph = async ({ client, name, namespace, }) => {
|
|
41
5
|
var _a, _b;
|
|
42
6
|
const resp = await client.platform.getFederatedGraphByName({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/commands/graph/federated-graph/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAElF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/commands/graph/federated-graph/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAElF,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAWzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAC3C,MAAM,EACN,IAAI,EACJ,SAAS,GAKV,EAAuB,EAAE;;IACxB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CACxD;QACE,IAAI;QACJ,SAAS;QACT,cAAc,EAAE,KAAK;KACtB,EACD;QACE,OAAO,EAAE,cAAc,EAAE;KAC1B,CACF,CAAC;IAEF,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,MAAK,cAAc,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,GAAG,EAAE,CAAC,GAAG,CAAC,uCAAuC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAC3E,EAAE,CAAC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,KAAI,EAAE,CAAC,CACtC,EAAE,CACJ,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;IAEvC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE;QACxC,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,eAAe,EAAE,CAAC,CAAC,eAAe;YAClC,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;YAC5C,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;YACxC,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC7C,MAAM,EACN,IAAI,EACJ,SAAS,GAKV,EAAE,EAAE;;IACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAC3D;QACE,IAAI;QACJ,SAAS;KACV,EACD;QACE,OAAO,EAAE,cAAc,EAAE;KAC1B,CACF,CAAC;IAEF,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,MAAK,cAAc,CAAC,EAAE,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAA,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,GAAG,EAAE,CAAC,GAAG,CAAC,kDAAkD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CACtF,EAAE,CAAC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,KAAI,EAAE,CAAC,CACtC,EAAE,CACJ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC,CAAC;AAEF,gHAAgH;AAChH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,EACnC,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,SAAS,GAMV,EAAE,EAAE;;IACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,mCAAmC,CACpE;QACE,IAAI,EAAE,YAAY;QAClB,SAAS;QACT,YAAY;KACb,EACD;QACE,OAAO,EAAE,cAAc,EAAE;KAC1B,CACF,CAAC;IAEF,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,MAAK,cAAc,CAAC,EAAE,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;IAE3B,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { EnumStatusCode } from '@wundergraph/cosmo-connect/dist/common/common_pb';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { getBaseHeaders } from '../../../core/config.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getFederatedGraphSchemas, getSubgraphsOfFedGraph } from '../../graph/federated-graph/utils.js';
|
|
5
|
+
import { fetchRouterConfig } from '../../router/utils.js';
|
|
5
6
|
export const registerFederatedGraphTools = ({ server, opts }) => {
|
|
6
7
|
// List federated graphs tool
|
|
7
8
|
server.registerTool('list_supergraphs', {
|
|
@@ -94,13 +95,13 @@ export const registerFederatedGraphTools = ({ server, opts }) => {
|
|
|
94
95
|
},
|
|
95
96
|
}, async ({ name, namespace }) => {
|
|
96
97
|
try {
|
|
97
|
-
const
|
|
98
|
+
const result = await fetchRouterConfig({
|
|
98
99
|
client: opts.client,
|
|
99
100
|
name,
|
|
100
101
|
namespace,
|
|
101
102
|
});
|
|
102
103
|
return {
|
|
103
|
-
content: [{ type: 'text', text: routerConfig }],
|
|
104
|
+
content: [{ type: 'text', text: result.routerConfig }],
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
107
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federated-graph-tools.js","sourceRoot":"","sources":["../../../../../src/commands/mcp/tools/federated-graph-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAClF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"federated-graph-tools.js","sourceRoot":"","sources":["../../../../../src/commands/mcp/tools/federated-graph-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
3
4
|
import { buildRouterConfig, normalizeURL, SubgraphKind, } from '@wundergraph/cosmo-shared';
|
|
4
5
|
import semver from 'semver';
|
|
5
6
|
import { Command, program } from 'commander';
|
|
6
7
|
import { parse, printSchema } from 'graphql';
|
|
7
8
|
import * as yaml from 'js-yaml';
|
|
8
|
-
import { basename, dirname, resolve } from 'pathe';
|
|
9
|
+
import { basename, dirname, resolve, join } from 'pathe';
|
|
9
10
|
import pc from 'picocolors';
|
|
10
11
|
import { printSchemaWithDirectives } from '@graphql-tools/utils';
|
|
11
|
-
import { FeatureFlagRouterExecutionConfig, FeatureFlagRouterExecutionConfigs, GRPCMapping, } from '@wundergraph/cosmo-connect/dist/node/v1/node_pb';
|
|
12
|
+
import { FeatureFlagRouterExecutionConfig, FeatureFlagRouterExecutionConfigs, GRPCMapping, RouterConfig, } from '@wundergraph/cosmo-connect/dist/node/v1/node_pb';
|
|
12
13
|
import Table from 'cli-table3';
|
|
13
14
|
import { ROUTER_COMPATIBILITY_VERSION_ONE } from '@wundergraph/composition';
|
|
14
15
|
import { composeSubgraphs, introspectSubgraph } from '../../../utils.js';
|
|
16
|
+
import { mapperFile, routerConfigFile, featureFlagsDir, getRouterConfigOutputFile, writeFeatureFlagConfigToFile, } from '../utils.js';
|
|
15
17
|
const STATIC_SCHEMA_VERSION_ID = '00000000-0000-0000-0000-000000000000';
|
|
16
18
|
function constructRouterSubgraph(result, s, index) {
|
|
17
19
|
const subgraphConfig = result.subgraphConfigBySubgraphName.get(s.name);
|
|
@@ -19,7 +21,7 @@ function constructRouterSubgraph(result, s, index) {
|
|
|
19
21
|
const configurationDataByTypeName = subgraphConfig === null || subgraphConfig === void 0 ? void 0 : subgraphConfig.configurationDataByTypeName;
|
|
20
22
|
const costs = subgraphConfig === null || subgraphConfig === void 0 ? void 0 : subgraphConfig.costs;
|
|
21
23
|
if (s.kind === SubgraphKind.Standard) {
|
|
22
|
-
|
|
24
|
+
return {
|
|
23
25
|
kind: SubgraphKind.Standard,
|
|
24
26
|
id: `${index}`,
|
|
25
27
|
name: s.name,
|
|
@@ -32,10 +34,9 @@ function constructRouterSubgraph(result, s, index) {
|
|
|
32
34
|
configurationDataByTypeName,
|
|
33
35
|
costs,
|
|
34
36
|
};
|
|
35
|
-
return composedSubgraph;
|
|
36
37
|
}
|
|
37
38
|
if (s.kind === SubgraphKind.Plugin) {
|
|
38
|
-
|
|
39
|
+
return {
|
|
39
40
|
kind: SubgraphKind.Plugin,
|
|
40
41
|
id: `${index}`,
|
|
41
42
|
name: s.name,
|
|
@@ -48,9 +49,8 @@ function constructRouterSubgraph(result, s, index) {
|
|
|
48
49
|
configurationDataByTypeName,
|
|
49
50
|
costs,
|
|
50
51
|
};
|
|
51
|
-
return composedSubgraphPlugin;
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
return {
|
|
54
54
|
kind: SubgraphKind.GRPC,
|
|
55
55
|
id: `${index}`,
|
|
56
56
|
name: s.name,
|
|
@@ -62,9 +62,68 @@ function constructRouterSubgraph(result, s, index) {
|
|
|
62
62
|
configurationDataByTypeName,
|
|
63
63
|
costs,
|
|
64
64
|
};
|
|
65
|
-
return composedSubgraphGRPC;
|
|
66
65
|
}
|
|
67
|
-
|
|
66
|
+
async function handleSplitRouterConfig({ config, inputFileLocation, options, routerConfig, subgraphs, }) {
|
|
67
|
+
let outputDir = options.out ? resolve(options.out) : options.out;
|
|
68
|
+
if (!outputDir) {
|
|
69
|
+
outputDir = resolve('router-compose-output');
|
|
70
|
+
}
|
|
71
|
+
if (!existsSync(outputDir)) {
|
|
72
|
+
await mkdir(outputDir);
|
|
73
|
+
}
|
|
74
|
+
const entries = await readdir(outputDir);
|
|
75
|
+
if (entries.length > 0) {
|
|
76
|
+
console.log(pc.red(`Split-config flag enabled; output directory "${outputDir}" is not empty. Please provide an empty directory path.`));
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const routerConfigJSON = routerConfig.toJsonString();
|
|
81
|
+
const mapper = new Map();
|
|
82
|
+
mapper.set('', createHash('sha256').update(routerConfigJSON).digest('hex'));
|
|
83
|
+
await writeFile(join(outputDir, routerConfigFile), routerConfigJSON);
|
|
84
|
+
if (!config.feature_flags || config.feature_flags.length === 0) {
|
|
85
|
+
await writeFile(join(outputDir, mapperFile), JSON.stringify(Object.fromEntries(mapper)));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const ffConfigs = await buildFeatureFlagsConfig(config, inputFileLocation, subgraphs, options);
|
|
89
|
+
const ffDir = join(outputDir, featureFlagsDir);
|
|
90
|
+
try {
|
|
91
|
+
await mkdir(ffDir);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
console.log(pc.red(`Split-config flag enabled; output directory "${ffDir}" already exists. Please provide an empty root directory path.`));
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
for (const [featureFlagName, featureFlagConfig] of Object.entries(ffConfigs.configByFeatureFlagName)) {
|
|
99
|
+
const ffRouterConfig = new RouterConfig({
|
|
100
|
+
engineConfig: featureFlagConfig.engineConfig,
|
|
101
|
+
version: featureFlagConfig.version,
|
|
102
|
+
subgraphs: featureFlagConfig.subgraphs,
|
|
103
|
+
compatibilityVersion: routerConfig.compatibilityVersion,
|
|
104
|
+
});
|
|
105
|
+
const routerConfigJson = ffRouterConfig.toJsonString();
|
|
106
|
+
await writeFeatureFlagConfigToFile(ffDir, featureFlagName, routerConfigJson);
|
|
107
|
+
mapper.set(featureFlagName, createHash('sha256').update(routerConfigJson).digest('hex'));
|
|
108
|
+
}
|
|
109
|
+
await writeFile(join(outputDir, mapperFile), JSON.stringify(Object.fromEntries(mapper)));
|
|
110
|
+
console.log(pc.green(`Router execution manifest successfully written to "${pc.bold(outputDir)}".`));
|
|
111
|
+
}
|
|
112
|
+
async function handleEmbeddedRouterConfig({ config, inputFileLocation, options, routerConfig, subgraphs, }) {
|
|
113
|
+
if (!config.feature_flags || config.feature_flags.length > 0) {
|
|
114
|
+
routerConfig.featureFlagConfigs = await buildFeatureFlagsConfig(config, inputFileLocation, subgraphs, options);
|
|
115
|
+
}
|
|
116
|
+
const routerConfigJson = routerConfig.toJsonString();
|
|
117
|
+
if (options.out) {
|
|
118
|
+
const output = await getRouterConfigOutputFile(options.out);
|
|
119
|
+
await writeFile(output, routerConfigJson);
|
|
120
|
+
console.log(pc.green(`Router execution config successfully written to "${pc.bold(options.out)}".`));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.log(routerConfigJson);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export default (_) => {
|
|
68
127
|
const command = new Command('compose');
|
|
69
128
|
command.description('Generates a router config from a local composition file. This makes it easy to test your router without a control-plane connection. For production, please use the "router fetch" command');
|
|
70
129
|
command.requiredOption('-i, --input <path-to-input>', 'The yaml file with data about graph and subgraphs.');
|
|
@@ -72,12 +131,19 @@ export default (opts) => {
|
|
|
72
131
|
command.option('--suppress-warnings', 'This flag suppresses any warnings produced by composition.');
|
|
73
132
|
command.option('--disable-resolvability-validation', 'This flag will disable the validation for whether all nodes of the federated graph are resolvable. Do NOT use unless troubleshooting.');
|
|
74
133
|
command.option('--ignore-external-keys', 'This flag ignores errors related to true external entity keys.');
|
|
134
|
+
command.option('--split-configs-enabled', 'This flag enables splitting the router config into multiple files. Router version 0.315.0 or higher is required.');
|
|
75
135
|
command.action(async (options) => {
|
|
76
136
|
const inputFile = resolve(options.input);
|
|
77
137
|
const inputFileLocation = dirname(inputFile);
|
|
78
138
|
if (!existsSync(inputFile)) {
|
|
79
139
|
program.error(pc.red(pc.bold(`The input file '${pc.bold(inputFile)}' does not exist. Please check the path and try again.`)));
|
|
80
140
|
}
|
|
141
|
+
if (options.out) {
|
|
142
|
+
options.out = resolve(options.out);
|
|
143
|
+
if (options.splitConfigsEnabled) {
|
|
144
|
+
await mkdir(options.out, { recursive: true });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
81
147
|
const fileContent = (await readFile(inputFile)).toString();
|
|
82
148
|
const config = yaml.load(fileContent);
|
|
83
149
|
const subgraphs = [];
|
|
@@ -141,17 +207,9 @@ export default (opts) => {
|
|
|
141
207
|
schemaVersionId: STATIC_SCHEMA_VERSION_ID,
|
|
142
208
|
subgraphs: subgraphs.map((s, index) => constructRouterSubgraph(result, s, index)),
|
|
143
209
|
});
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
routerConfig
|
|
147
|
-
}
|
|
148
|
-
if (options.out) {
|
|
149
|
-
await writeFile(options.out, routerConfig.toJsonString());
|
|
150
|
-
console.log(pc.green(`Router config successfully written to ${pc.bold(options.out)}`));
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
console.log(routerConfig.toJsonString());
|
|
154
|
-
}
|
|
210
|
+
await (options.splitConfigsEnabled
|
|
211
|
+
? handleSplitRouterConfig({ config, inputFileLocation, options, routerConfig, subgraphs })
|
|
212
|
+
: handleEmbeddedRouterConfig({ config, inputFileLocation, options, routerConfig, subgraphs }));
|
|
155
213
|
});
|
|
156
214
|
return command;
|
|
157
215
|
};
|
|
@@ -216,8 +274,7 @@ async function toSubgraphMetadataStandard(inputFileLocation, index, s, subgraphs
|
|
|
216
274
|
// The GraphQL schema is provided in the input file
|
|
217
275
|
if ((_c = s.schema) === null || _c === void 0 ? void 0 : _c.file) {
|
|
218
276
|
const schemaFile = resolve(inputFileLocation, s.schema.file);
|
|
219
|
-
|
|
220
|
-
schemaSDL = sdl;
|
|
277
|
+
schemaSDL = (await readFile(schemaFile)).toString();
|
|
221
278
|
}
|
|
222
279
|
else {
|
|
223
280
|
// The GraphQL schema is not provided in the input file, so we need to introspect it
|
|
@@ -291,11 +348,11 @@ function validateSubgraphPlugin(inputFileLocation, s) {
|
|
|
291
348
|
}
|
|
292
349
|
}
|
|
293
350
|
async function buildFeatureFlagsConfig(config, inputFileLocation, subgraphs, options) {
|
|
294
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
351
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
295
352
|
const ffConfigs = new FeatureFlagRouterExecutionConfigs();
|
|
296
353
|
// @TODO This logic should exist only once in the shared package and reused across
|
|
297
354
|
// control-plane and cli
|
|
298
|
-
for (const ff of config.feature_flags) {
|
|
355
|
+
for (const ff of (_a = config.feature_flags) !== null && _a !== void 0 ? _a : []) {
|
|
299
356
|
const featureSubgraphs = [];
|
|
300
357
|
const standardSubgraphs = config.subgraphs.filter((ss) => !('plugin' in ss) && !('grpc' in ss));
|
|
301
358
|
// Process each subgraph for this feature flag
|
|
@@ -304,9 +361,9 @@ async function buildFeatureFlagsConfig(config, inputFileLocation, subgraphs, opt
|
|
|
304
361
|
const featureSubgraph = ff.feature_graphs.find((ffs) => ffs.subgraph_name === s.name);
|
|
305
362
|
if (featureSubgraph) {
|
|
306
363
|
// This subgraph is overridden by a feature graph
|
|
307
|
-
const url = (
|
|
364
|
+
const url = (_c = (_b = featureSubgraph.introspection) === null || _b === void 0 ? void 0 : _b.url) !== null && _c !== void 0 ? _c : featureSubgraph.routing_url;
|
|
308
365
|
let schemaSDL = '';
|
|
309
|
-
if ((
|
|
366
|
+
if ((_d = featureSubgraph.schema) === null || _d === void 0 ? void 0 : _d.file) {
|
|
310
367
|
const schemaFile = resolve(inputFileLocation, featureSubgraph.schema.file);
|
|
311
368
|
schemaSDL = await readFile(schemaFile, 'utf8');
|
|
312
369
|
}
|
|
@@ -314,14 +371,14 @@ async function buildFeatureFlagsConfig(config, inputFileLocation, subgraphs, opt
|
|
|
314
371
|
try {
|
|
315
372
|
const result = await introspectSubgraph({
|
|
316
373
|
subgraphURL: url,
|
|
317
|
-
additionalHeaders: Object.entries((
|
|
374
|
+
additionalHeaders: Object.entries((_f = (_e = featureSubgraph.introspection) === null || _e === void 0 ? void 0 : _e.headers) !== null && _f !== void 0 ? _f : {}).map(([key, value]) => ({
|
|
318
375
|
key,
|
|
319
376
|
value,
|
|
320
377
|
})),
|
|
321
|
-
rawIntrospection: (
|
|
378
|
+
rawIntrospection: (_g = featureSubgraph.introspection) === null || _g === void 0 ? void 0 : _g.raw,
|
|
322
379
|
});
|
|
323
380
|
if (!result.success) {
|
|
324
|
-
program.error(`Could not introspect feature-graph subgraph ${featureSubgraph.name}, URL: ${url}: ${(
|
|
381
|
+
program.error(`Could not introspect feature-graph subgraph ${featureSubgraph.name}, URL: ${url}: ${(_h = result.errorMessage) !== null && _h !== void 0 ? _h : 'failed'}`);
|
|
325
382
|
}
|
|
326
383
|
schemaSDL = result.sdl;
|
|
327
384
|
}
|
|
@@ -334,10 +391,10 @@ async function buildFeatureFlagsConfig(config, inputFileLocation, subgraphs, opt
|
|
|
334
391
|
name: featureSubgraph.name,
|
|
335
392
|
sdl: schemaSDL,
|
|
336
393
|
routingUrl: featureSubgraph.routing_url,
|
|
337
|
-
subscriptionUrl: ((
|
|
338
|
-
subscriptionProtocol: ((
|
|
339
|
-
websocketSubprotocol: ((
|
|
340
|
-
? ((
|
|
394
|
+
subscriptionUrl: ((_j = featureSubgraph.subscription) === null || _j === void 0 ? void 0 : _j.url) || featureSubgraph.routing_url,
|
|
395
|
+
subscriptionProtocol: ((_k = featureSubgraph.subscription) === null || _k === void 0 ? void 0 : _k.protocol) || 'ws',
|
|
396
|
+
websocketSubprotocol: ((_l = featureSubgraph.subscription) === null || _l === void 0 ? void 0 : _l.protocol) === 'ws'
|
|
397
|
+
? ((_m = featureSubgraph.subscription) === null || _m === void 0 ? void 0 : _m.websocketSubprotocol) || 'auto'
|
|
341
398
|
: 'auto',
|
|
342
399
|
});
|
|
343
400
|
}
|
|
@@ -398,7 +455,7 @@ async function buildFeatureFlagsConfig(config, inputFileLocation, subgraphs, opt
|
|
|
398
455
|
const schema = subgraphConfig === null || subgraphConfig === void 0 ? void 0 : subgraphConfig.schema;
|
|
399
456
|
const configurationDataByTypeName = subgraphConfig === null || subgraphConfig === void 0 ? void 0 : subgraphConfig.configurationDataByTypeName;
|
|
400
457
|
const costs = subgraphConfig === null || subgraphConfig === void 0 ? void 0 : subgraphConfig.costs;
|
|
401
|
-
|
|
458
|
+
return {
|
|
402
459
|
kind: SubgraphKind.Standard,
|
|
403
460
|
id: `${index}`,
|
|
404
461
|
name: s.name,
|
|
@@ -411,7 +468,6 @@ async function buildFeatureFlagsConfig(config, inputFileLocation, subgraphs, opt
|
|
|
411
468
|
configurationDataByTypeName,
|
|
412
469
|
costs,
|
|
413
470
|
};
|
|
414
|
-
return composedSubgraph;
|
|
415
471
|
}),
|
|
416
472
|
});
|
|
417
473
|
ffConfigs.configByFeatureFlagName[ff.name] = new FeatureFlagRouterExecutionConfig({
|