wgc 0.78.2 → 0.79.0
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 +11 -4
- package/dist/package.json +3 -2
- package/dist/src/commands/index.js +22 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/mcp/tools/utils/__tests__/schema.test.d.ts +1 -0
- package/dist/src/commands/mcp/tools/utils/__tests__/schema.test.js +78 -0
- package/dist/src/commands/mcp/tools/utils/__tests__/schema.test.js.map +1 -0
- package/dist/src/commands/mcp/tools/utils/schema.d.ts +9 -0
- package/dist/src/commands/mcp/tools/utils/schema.js +28 -0
- package/dist/src/commands/mcp/tools/utils/schema.js.map +1 -0
- package/dist/src/commands/mcp/tools/verify-query-against-in-memory-schema.js +5 -5
- package/dist/src/commands/mcp/tools/verify-query-against-in-memory-schema.js.map +1 -1
- package/dist/src/commands/subgraph/commands/check.js +4 -0
- package/dist/src/commands/subgraph/commands/check.js.map +1 -1
- package/dist/src/core/telemetry.d.ts +13 -0
- package/dist/src/core/telemetry.js +109 -0
- package/dist/src/core/telemetry.js.map +1 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
package/README.md
CHANGED
|
@@ -22,10 +22,17 @@ npm install -g wgc --help
|
|
|
22
22
|
|
|
23
23
|
### Telemetry
|
|
24
24
|
|
|
25
|
-
The CLI tool collects
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
```
|
|
25
|
+
The CLI tool collects usage data to help us improve the tool and understand how users interact with it. You can disable telemetry in one of the following ways:
|
|
26
|
+
|
|
27
|
+
1. Set the environment variable:
|
|
28
|
+
```shell
|
|
29
|
+
export COSMO_TELEMETRY_DISABLED=true
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
2. Follow the [Console Do Not Track](https://consoledonottrack.com/) standard:
|
|
33
|
+
```shell
|
|
34
|
+
export DO_NOT_TRACK=1
|
|
35
|
+
```
|
|
29
36
|
|
|
30
37
|
### Development
|
|
31
38
|
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wgc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.79.0",
|
|
4
4
|
"description": "The official CLI tool to manage the GraphQL Federation Platform Cosmo",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
"ora": "^8.0.1",
|
|
68
68
|
"pathe": "^1.1.1",
|
|
69
69
|
"picocolors": "^1.0.0",
|
|
70
|
+
"posthog-node": "^4.17.1",
|
|
70
71
|
"trieve-ts-sdk": "^0.0.80",
|
|
71
72
|
"undici": "^6.21.1",
|
|
72
73
|
"zod": "^3.22.4"
|
|
@@ -87,7 +88,7 @@
|
|
|
87
88
|
"prettier": "^3.5.2",
|
|
88
89
|
"tsx": "^4.17.0",
|
|
89
90
|
"typescript": "5.5.2",
|
|
90
|
-
"vitest": "^
|
|
91
|
+
"vitest": "^3.1.2"
|
|
91
92
|
},
|
|
92
93
|
"gitHead": "c37aed755e1b19ed91d30f9b5f7041e15c56901a"
|
|
93
94
|
}
|
|
@@ -3,6 +3,7 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { CreateClient } from '../core/client/client.js';
|
|
4
4
|
import { config, configDir } from '../core/config.js';
|
|
5
5
|
import { checkForUpdates } from '../utils.js';
|
|
6
|
+
import { capture } from '../core/telemetry.js';
|
|
6
7
|
import AuthCommands from './auth/index.js';
|
|
7
8
|
import MonographCommands from './graph/monograph/index.js';
|
|
8
9
|
import FederatedGraphCommands from './graph/federated-graph/index.js';
|
|
@@ -76,5 +77,26 @@ program.hook('preAction', async () => {
|
|
|
76
77
|
mkdirSync(configDir, { recursive: true });
|
|
77
78
|
await checkForUpdates();
|
|
78
79
|
});
|
|
80
|
+
// Hook to capture command usage
|
|
81
|
+
program.hook('preAction', (thisCommand, actionCommand) => {
|
|
82
|
+
const commandPath = actionCommand.name();
|
|
83
|
+
const parentNames = [];
|
|
84
|
+
let current = actionCommand.parent;
|
|
85
|
+
// Build the full command path (e.g., "federated-graph publish")
|
|
86
|
+
while (current) {
|
|
87
|
+
if (current.name() !== '') {
|
|
88
|
+
parentNames.unshift(current.name());
|
|
89
|
+
}
|
|
90
|
+
current = current.parent;
|
|
91
|
+
}
|
|
92
|
+
const fullCommandPath = [...parentNames, commandPath].join(' ');
|
|
93
|
+
const args = actionCommand.args || [];
|
|
94
|
+
// Capture command execution event
|
|
95
|
+
capture('command_executed', {
|
|
96
|
+
command_path: fullCommandPath,
|
|
97
|
+
command_options: actionCommand.opts(),
|
|
98
|
+
command_args: args,
|
|
99
|
+
});
|
|
100
|
+
});
|
|
79
101
|
export default program;
|
|
80
102
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { lexicographicSortSchema, printSchema } from 'graphql';
|
|
3
|
+
import { buildSchemaWithoutDirectives } from '../schema.js';
|
|
4
|
+
describe('buildSchemaWithoutDirectives', () => {
|
|
5
|
+
it('should remove all directive definitions and usages from a federation schema', () => {
|
|
6
|
+
const schemaWithDirectives = `
|
|
7
|
+
directive @key(fields: String!) on OBJECT | INTERFACE
|
|
8
|
+
directive @external on FIELD_DEFINITION
|
|
9
|
+
directive @requires(fields: String!) on FIELD_DEFINITION
|
|
10
|
+
directive @provides(fields: String!) on FIELD_DEFINITION
|
|
11
|
+
directive @extends on OBJECT | INTERFACE
|
|
12
|
+
|
|
13
|
+
type Query {
|
|
14
|
+
topProducts: [Product]
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type Product @key(fields: "id") {
|
|
18
|
+
id: ID!
|
|
19
|
+
name: String!
|
|
20
|
+
price: Int @external
|
|
21
|
+
weight: Int @external
|
|
22
|
+
shippingEstimate: Int @requires(fields: "price weight")
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type User @key(fields: "id") @extends {
|
|
26
|
+
id: ID! @external
|
|
27
|
+
username: String @external
|
|
28
|
+
reviews: [Review] @provides(fields: "author")
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type Review {
|
|
32
|
+
id: ID!
|
|
33
|
+
author: User
|
|
34
|
+
product: Product!
|
|
35
|
+
rating: Int!
|
|
36
|
+
}
|
|
37
|
+
`;
|
|
38
|
+
const expectedSchema = `type Product {
|
|
39
|
+
id: ID!
|
|
40
|
+
name: String!
|
|
41
|
+
price: Int
|
|
42
|
+
shippingEstimate: Int
|
|
43
|
+
weight: Int
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
type Query {
|
|
47
|
+
topProducts: [Product]
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
type Review {
|
|
51
|
+
author: User
|
|
52
|
+
id: ID!
|
|
53
|
+
product: Product!
|
|
54
|
+
rating: Int!
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type User {
|
|
58
|
+
id: ID!
|
|
59
|
+
reviews: [Review]
|
|
60
|
+
username: String
|
|
61
|
+
}`;
|
|
62
|
+
const schema = buildSchemaWithoutDirectives(schemaWithDirectives);
|
|
63
|
+
// Sort the schema to ensure consistent output
|
|
64
|
+
const sortedSchema = lexicographicSortSchema(schema);
|
|
65
|
+
const cleanedSchemaString = printSchema(sortedSchema);
|
|
66
|
+
// Compare the actual cleaned schema with expected schema
|
|
67
|
+
expect(cleanedSchemaString.trim()).toBe(expectedSchema.trim());
|
|
68
|
+
});
|
|
69
|
+
it('should throw an error for an invalid schema', () => {
|
|
70
|
+
const invalidSchema = `
|
|
71
|
+
type Query {
|
|
72
|
+
invalidField: NonExistentType
|
|
73
|
+
}
|
|
74
|
+
`;
|
|
75
|
+
expect(() => buildSchemaWithoutDirectives(invalidSchema)).toThrowError('Failed to parse schema: Unknown type: "NonExistentType".');
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../../../../../src/commands/mcp/tools/utils/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAE5D,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+B5B,CAAC;QAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;EAuBzB,CAAC;QAEC,MAAM,MAAM,GAAG,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;QAClE,8CAA8C;QAC9C,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,mBAAmB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QAEtD,yDAAyD;QACzD,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,aAAa,GAAG;;;;KAIrB,CAAC;QAEF,MAAM,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CACpE,0DAA0D,CAC3D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { GraphQLSchema } from 'graphql';
|
|
2
|
+
/**
|
|
3
|
+
* Removes all directive definitions and directive usages from a GraphQL schema string
|
|
4
|
+
* and returns a built GraphQLSchema.
|
|
5
|
+
*
|
|
6
|
+
* @param schemaString - The GraphQL schema string to process
|
|
7
|
+
* @returns A built GraphQLSchema with all directives removed
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildSchemaWithoutDirectives(schemaString: string): GraphQLSchema;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { parse, visit } from 'graphql';
|
|
2
|
+
import { buildASTSchema } from '@wundergraph/composition';
|
|
3
|
+
/**
|
|
4
|
+
* Removes all directive definitions and directive usages from a GraphQL schema string
|
|
5
|
+
* and returns a built GraphQLSchema.
|
|
6
|
+
*
|
|
7
|
+
* @param schemaString - The GraphQL schema string to process
|
|
8
|
+
* @returns A built GraphQLSchema with all directives removed
|
|
9
|
+
*/
|
|
10
|
+
export function buildSchemaWithoutDirectives(schemaString) {
|
|
11
|
+
// Parse the schema into an AST
|
|
12
|
+
try {
|
|
13
|
+
const ast = parse(schemaString, { noLocation: true });
|
|
14
|
+
// Visit the AST and remove all directives
|
|
15
|
+
const cleanedAst = visit(ast, {
|
|
16
|
+
// Remove directive definitions
|
|
17
|
+
DirectiveDefinition: () => null,
|
|
18
|
+
// Remove directive usages from any node that can have directives
|
|
19
|
+
Directive: () => null,
|
|
20
|
+
});
|
|
21
|
+
// Build and return the schema
|
|
22
|
+
return buildASTSchema(cleanedAst, { assumeValid: true, assumeValidSDL: true });
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
throw new Error(`Failed to parse schema: ${error.message}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../../src/commands/mcp/tools/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,cAAc,EAAa,MAAM,0BAA0B,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,YAAoB;IAC/D,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,0CAA0C;QAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE;YAC5B,+BAA+B;YAC/B,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI;YAC/B,iEAAiE;YACjE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;SACtB,CAAC,CAAC;QAEH,8BAA8B;QAC9B,OAAO,cAAc,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { parse, validate } from 'graphql';
|
|
3
|
+
import { buildSchemaWithoutDirectives } from './utils/schema.js';
|
|
3
4
|
/**
|
|
4
5
|
* Registers the verify-query-against-in-memory-schema tool with the MCP server.
|
|
5
6
|
*
|
|
@@ -9,7 +10,6 @@ import { buildSchema, parse, validate } from 'graphql';
|
|
|
9
10
|
*/
|
|
10
11
|
export const registerVerifyQueryAgainstInMemorySchemaTool = ({ server, opts, }) => {
|
|
11
12
|
server.tool('verify_query_against_in_memory_schema', 'Verify if a GraphQL query is valid against a local in memory Supergraph or GraphQL SDL.', { query: z.string(), schema: z.string() }, ({ query, schema: schemaString }) => {
|
|
12
|
-
// Renamed schema to schemaString to avoid conflict
|
|
13
13
|
try {
|
|
14
14
|
let document;
|
|
15
15
|
try {
|
|
@@ -20,14 +20,14 @@ export const registerVerifyQueryAgainstInMemorySchemaTool = ({ server, opts, })
|
|
|
20
20
|
content: [{ type: 'text', text: `Query parsing failed:\n${syntaxError.message}` }],
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
// Build the schema from the string
|
|
23
|
+
// Build the schema from the string, removing all directives
|
|
24
24
|
let schema;
|
|
25
25
|
try {
|
|
26
|
-
schema =
|
|
26
|
+
schema = buildSchemaWithoutDirectives(schemaString);
|
|
27
27
|
}
|
|
28
28
|
catch (schemaError) {
|
|
29
29
|
return {
|
|
30
|
-
content: [{ type: 'text', text:
|
|
30
|
+
content: [{ type: 'text', text: schemaError.message }],
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
// Validate the query against the schema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-query-against-in-memory-schema.js","sourceRoot":"","sources":["../../../../../src/commands/mcp/tools/verify-query-against-in-memory-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"verify-query-against-in-memory-schema.js","sourceRoot":"","sources":["../../../../../src/commands/mcp/tools/verify-query-against-in-memory-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAgB,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4CAA4C,GAAG,CAAC,EAC3D,MAAM,EACN,IAAI,GAIL,EAAE,EAAE;IACH,MAAM,CAAC,IAAI,CACT,uCAAuC,EACvC,yFAAyF,EACzF,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EACzC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC;YACb,IAAI,CAAC;gBACH,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,WAAgB,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;iBACnF,CAAC;YACJ,CAAC;YAED,4DAA4D;YAC5D,IAAI,MAAM,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,GAAG,4BAA4B,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,WAAgB,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;iBACvD,CAAC;YACJ,CAAC;YAED,wCAAwC;YACxC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEpD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,aAAa,GAAG,gBAAgB;qBACnC,GAAG,CAAC,CAAC,KAAmB,EAAE,EAAE;;oBAC3B,MAAM,SAAS,GACb,CAAA,MAAA,KAAK,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;wBAClF,kBAAkB,CAAC;oBACrB,OAAO,KAAK,KAAK,CAAC,OAAO,QAAQ,SAAS,GAAG,CAAC;gBAChD,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,aAAa,EAAE,EAAE,CAAC;iBAChF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC;aACxE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,iCAAiC;YACjC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;aACpF,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { Command, program } from 'commander';
|
|
|
4
4
|
import { resolve } from 'pathe';
|
|
5
5
|
import pc from 'picocolors';
|
|
6
6
|
import { VCSContext } from '@wundergraph/cosmo-connect/dist/platform/v1/platform_pb';
|
|
7
|
+
import { splitLabel } from '@wundergraph/cosmo-shared';
|
|
7
8
|
import { config, getBaseHeaders } from '../../../core/config.js';
|
|
8
9
|
import { verifyGitHubIntegration } from '../../../github.js';
|
|
9
10
|
import { handleCheckResult } from '../../../handle-check-result.js';
|
|
@@ -15,6 +16,8 @@ export default (opts) => {
|
|
|
15
16
|
command.option('--schema <path-to-schema>', 'The path of the new schema file.');
|
|
16
17
|
command.option('--delete', 'Run checks in case the subgraph is deleted.');
|
|
17
18
|
command.option('--skip-traffic-check', 'This will skip checking for client traffic and any breaking change will fail the run.');
|
|
19
|
+
command.option('--label [labels...]', 'The labels to apply to the subgraph. The labels are passed in the format <key>=<value> <key>=<value>.' +
|
|
20
|
+
' This parameter is always ignored if the subgraph already exists.', []);
|
|
18
21
|
command.action(async (name, options) => {
|
|
19
22
|
let schemaFile;
|
|
20
23
|
if (!options.schema && !options.delete) {
|
|
@@ -45,6 +48,7 @@ export default (opts) => {
|
|
|
45
48
|
delete: options.delete,
|
|
46
49
|
skipTrafficCheck: options.skipTrafficCheck,
|
|
47
50
|
vcsContext,
|
|
51
|
+
labels: options.label.map((label) => splitLabel(label)),
|
|
48
52
|
}, {
|
|
49
53
|
headers: getBaseHeaders(),
|
|
50
54
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../../src/commands/subgraph/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,yDAAyD,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,eAAe,CAAC,IAAwB,EAAE,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,WAAW,CAAC,yFAAyF,CAAC,CAAC;IAC/G,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,2EAA2E,CAAC,CAAC;IACxG,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,gCAAgC,CAAC,CAAC;IAC7E,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,kCAAkC,CAAC,CAAC;IAChF,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,6CAA6C,CAAC,CAAC;IAC1E,OAAO,CAAC,MAAM,CACZ,sBAAsB,EACtB,uFAAuF,CACxF,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACrC,IAAI,UAAU,CAAC;QAEf,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CACX,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,wDAAwD,CAAC,CACzG,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,kCAAkC,EAAE,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnG,IAAI,UAAkC,CAAC;QAEvC,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtE,UAAU,GAAG,IAAI,UAAU,CAAC;gBAC1B,MAAM,EAAE,MAAM,CAAC,WAAW;gBAC1B,SAAS,EAAE,MAAM,CAAC,cAAc;gBAChC,MAAM,EAAE,MAAM,CAAC,WAAW;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,mDAAmD;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CACzD;YACE,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC;YAC9B,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,UAAU;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../../src/commands/subgraph/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initialize PostHog client
|
|
3
|
+
* This should be called once at the start of the CLI
|
|
4
|
+
*/
|
|
5
|
+
export declare const initTelemetry: () => void;
|
|
6
|
+
/**
|
|
7
|
+
* Capture a usage event
|
|
8
|
+
*/
|
|
9
|
+
export declare const capture: (eventName: string, properties?: Record<string, any>) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Shutdown PostHog client - should be called before CLI exits
|
|
12
|
+
*/
|
|
13
|
+
export declare const shutdownTelemetry: () => Promise<void>;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import { PostHog } from 'posthog-node';
|
|
3
|
+
import { config, getBaseHeaders } from './config.js';
|
|
4
|
+
// Environment variables to allow opting out of telemetry
|
|
5
|
+
// Support for COSMO_TELEMETRY_DISABLED and Console Do Not Track standard
|
|
6
|
+
const TELEMETRY_DISABLED = process.env.COSMO_TELEMETRY_DISABLED === 'true' || process.env.DO_NOT_TRACK === '1';
|
|
7
|
+
let client = null;
|
|
8
|
+
// Detect if running in a CI environment
|
|
9
|
+
const isCI = () => {
|
|
10
|
+
return Boolean(process.env.CI || // Travis CI, CircleCI, GitLab CI, GitHub Actions, etc.
|
|
11
|
+
process.env.CONTINUOUS_INTEGRATION ||
|
|
12
|
+
process.env.BUILD_NUMBER || // Jenkins
|
|
13
|
+
process.env.TEAMCITY_VERSION || // TeamCity
|
|
14
|
+
process.env.GITLAB_CI ||
|
|
15
|
+
process.env.GITHUB_ACTIONS ||
|
|
16
|
+
process.env.BUILDKITE);
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Initialize PostHog client
|
|
20
|
+
* This should be called once at the start of the CLI
|
|
21
|
+
*/
|
|
22
|
+
export const initTelemetry = () => {
|
|
23
|
+
if (TELEMETRY_DISABLED) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const posthogApiKey = process.env.POSTHOG_API_KEY || '';
|
|
27
|
+
const posthogHost = process.env.POSTHOG_HOST || 'https://eu.i.posthog.com';
|
|
28
|
+
client = new PostHog(posthogApiKey, {
|
|
29
|
+
host: posthogHost,
|
|
30
|
+
flushAt: 1, // For CLI, we want to send events immediately
|
|
31
|
+
flushInterval: 0, // Don't wait to flush events
|
|
32
|
+
disableGeoip: false,
|
|
33
|
+
});
|
|
34
|
+
// Handle errors silently to not interrupt CLI operations
|
|
35
|
+
client.on('error', (err) => {
|
|
36
|
+
if (process.env.DEBUG) {
|
|
37
|
+
console.error('Telemetry error:', err);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Capture a usage event
|
|
43
|
+
*/
|
|
44
|
+
export const capture = (eventName, properties = {}) => {
|
|
45
|
+
if (TELEMETRY_DISABLED || !client) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const distinctId = getDistinctId();
|
|
50
|
+
const metadata = getMetadata();
|
|
51
|
+
client.capture({
|
|
52
|
+
distinctId,
|
|
53
|
+
event: eventName,
|
|
54
|
+
properties: {
|
|
55
|
+
...metadata,
|
|
56
|
+
...properties,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
// Silently fail to not disrupt CLI operations
|
|
62
|
+
if (process.env.DEBUG) {
|
|
63
|
+
console.error('Failed to capture telemetry event:', err);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Generate a consistent distinct ID
|
|
69
|
+
*/
|
|
70
|
+
const getDistinctId = () => {
|
|
71
|
+
// Use organization slug if available
|
|
72
|
+
const headers = getBaseHeaders();
|
|
73
|
+
// Convert HeadersInit to Record to safely access properties
|
|
74
|
+
const headersRecord = Object.fromEntries(Object.entries(headers).map(([key, value]) => [key, value.toString()]));
|
|
75
|
+
const organizationSlug = headersRecord['cosmo-org-slug'] || 'anonymous';
|
|
76
|
+
return `cli_${organizationSlug}`;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Get CLI metadata to include with all events
|
|
80
|
+
*/
|
|
81
|
+
const getMetadata = () => {
|
|
82
|
+
var _a;
|
|
83
|
+
return {
|
|
84
|
+
cli_version: config.version,
|
|
85
|
+
node_version: process.version,
|
|
86
|
+
os_name: process.platform,
|
|
87
|
+
os_version: ((_a = process.release) === null || _a === void 0 ? void 0 : _a.name) || '',
|
|
88
|
+
platform: process.arch,
|
|
89
|
+
machine_id: os.hostname(),
|
|
90
|
+
is_ci: isCI(),
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Shutdown PostHog client - should be called before CLI exits
|
|
95
|
+
*/
|
|
96
|
+
export const shutdownTelemetry = async () => {
|
|
97
|
+
if (client) {
|
|
98
|
+
try {
|
|
99
|
+
await client.shutdown();
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
// Silently fail
|
|
103
|
+
if (process.env.DEBUG) {
|
|
104
|
+
console.error('Failed to shutdown telemetry:', err);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/core/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -3,9 +3,12 @@ import * as dotenv from 'dotenv';
|
|
|
3
3
|
import pc from 'picocolors';
|
|
4
4
|
import boxen from 'boxen';
|
|
5
5
|
import program from './commands/index.js';
|
|
6
|
+
import { initTelemetry, shutdownTelemetry } from './core/telemetry.js';
|
|
6
7
|
dotenv.config();
|
|
8
|
+
initTelemetry();
|
|
7
9
|
try {
|
|
8
10
|
await program.parseAsync(process.argv);
|
|
11
|
+
await shutdownTelemetry();
|
|
9
12
|
}
|
|
10
13
|
catch (e) {
|
|
11
14
|
console.log('');
|
|
@@ -24,5 +27,6 @@ Please try the below steps to solve the issue
|
|
|
24
27
|
borderStyle: 'round',
|
|
25
28
|
}));
|
|
26
29
|
process.exitCode = 1;
|
|
30
|
+
await shutdownTelemetry();
|
|
27
31
|
}
|
|
28
32
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,aAAa,EAAE,CAAC;AAEhB,IAAI,CAAC;IACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjB,MAAM,OAAO,GAAG;;;;MAIZ,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC;;MAE9B,EAAE,CAAC,IAAI,CAAC,wDAAwD,CAAC,EAAE,CAAC;IAExE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,OAAO,EAAE;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,OAAO;KACrB,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAErB,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC"}
|