@happyvertical/graphql 0.79.0 → 0.80.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/AGENT.md CHANGED
@@ -7,7 +7,7 @@ GitHub GraphQL client for SDK packages
7
7
  ## Package Map
8
8
  - Package: `@happyvertical/graphql`
9
9
  - Hierarchy path: `@happyvertical/sdk > packages > graphql`
10
- - Workspace position: `14 of 31` local packages
10
+ - Workspace position: `14 of 32` local packages
11
11
  - Internal dependencies: none
12
12
  - Internal dependents: `@happyvertical/projects`, `@happyvertical/repos`
13
13
  - Knowledge graph files: `AGENT.md`, `metadata.json`, `ecosystem-manifest.json`
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- import { existsSync, mkdirSync, copyFileSync } from "node:fs";
2
+ import { copyFileSync, existsSync, mkdirSync } from "node:fs";
3
3
  import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- const Dirname = dirname(fileURLToPath(import.meta.url));
6
- const pkgRoot = join(Dirname, "../..");
7
- const targetDir = join(process.cwd(), ".claude");
8
- if (!existsSync(targetDir)) {
9
- mkdirSync(targetDir, { recursive: true });
10
- }
11
- const pkgName = "graphql";
12
- const agentMdSrc = existsSync(join(pkgRoot, "AGENT.md")) ? join(pkgRoot, "AGENT.md") : join(pkgRoot, "CLAUDE.md");
13
- const metaSrc = existsSync(join(pkgRoot, "metadata.json")) ? join(pkgRoot, "metadata.json") : join(pkgRoot, ".claude-meta.json");
14
- if (existsSync(agentMdSrc)) {
15
- copyFileSync(agentMdSrc, join(targetDir, `have-${pkgName}.md`));
16
- }
17
- if (existsSync(metaSrc)) {
18
- copyFileSync(metaSrc, join(targetDir, `have-${pkgName}.meta.json`));
19
- }
5
+ //#region src/cli/claude-context.ts
6
+ /**
7
+ * CLI script to install agent context for @happyvertical/graphql
8
+ * Run the published context installer binary for this package.
9
+ */
10
+ var pkgRoot = join(dirname(fileURLToPath(import.meta.url)), "../..");
11
+ var targetDir = join(process.cwd(), ".claude");
12
+ if (!existsSync(targetDir)) mkdirSync(targetDir, { recursive: true });
13
+ var pkgName = "graphql";
14
+ var agentMdSrc = existsSync(join(pkgRoot, "AGENT.md")) ? join(pkgRoot, "AGENT.md") : join(pkgRoot, "CLAUDE.md");
15
+ var metaSrc = existsSync(join(pkgRoot, "metadata.json")) ? join(pkgRoot, "metadata.json") : join(pkgRoot, ".claude-meta.json");
16
+ if (existsSync(agentMdSrc)) copyFileSync(agentMdSrc, join(targetDir, `have-${pkgName}.md`));
17
+ if (existsSync(metaSrc)) copyFileSync(metaSrc, join(targetDir, `have-${pkgName}.meta.json`));
20
18
  console.log(`✓ Installed @happyvertical/${pkgName} context to .claude/`);
21
- //# sourceMappingURL=claude-context.js.map
19
+ //#endregion
20
+
21
+ //# sourceMappingURL=claude-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-context.js","sources":["../../src/cli/claude-context.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * CLI script to install agent context for @happyvertical/graphql\n * Run the published context installer binary for this package.\n */\nimport { copyFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst Dirname = dirname(fileURLToPath(import.meta.url));\nconst pkgRoot = join(Dirname, '../..');\nconst targetDir = join(process.cwd(), '.claude');\n\nif (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n}\n\nconst pkgName = 'graphql';\nconst agentMdSrc = existsSync(join(pkgRoot, 'AGENT.md'))\n ? join(pkgRoot, 'AGENT.md')\n : join(pkgRoot, 'CLAUDE.md');\nconst metaSrc = existsSync(join(pkgRoot, 'metadata.json'))\n ? join(pkgRoot, 'metadata.json')\n : join(pkgRoot, '.claude-meta.json');\n\nif (existsSync(agentMdSrc)) {\n copyFileSync(agentMdSrc, join(targetDir, `have-${pkgName}.md`));\n}\n\nif (existsSync(metaSrc)) {\n copyFileSync(metaSrc, join(targetDir, `have-${pkgName}.meta.json`));\n}\n\nconsole.log(`✓ Installed @happyvertical/${pkgName} context to .claude/`);\n"],"names":[],"mappings":";;;;AASA,MAAM,UAAU,QAAQ,cAAc,YAAY,GAAG,CAAC;AACtD,MAAM,UAAU,KAAK,SAAS,OAAO;AACrC,MAAM,YAAY,KAAK,QAAQ,IAAA,GAAO,SAAS;AAE/C,IAAI,CAAC,WAAW,SAAS,GAAG;AAC1B,YAAU,WAAW,EAAE,WAAW,KAAA,CAAM;AAC1C;AAEA,MAAM,UAAU;AAChB,MAAM,aAAa,WAAW,KAAK,SAAS,UAAU,CAAC,IACnD,KAAK,SAAS,UAAU,IACxB,KAAK,SAAS,WAAW;AAC7B,MAAM,UAAU,WAAW,KAAK,SAAS,eAAe,CAAC,IACrD,KAAK,SAAS,eAAe,IAC7B,KAAK,SAAS,mBAAmB;AAErC,IAAI,WAAW,UAAU,GAAG;AAC1B,eAAa,YAAY,KAAK,WAAW,QAAQ,OAAO,KAAK,CAAC;AAChE;AAEA,IAAI,WAAW,OAAO,GAAG;AACvB,eAAa,SAAS,KAAK,WAAW,QAAQ,OAAO,YAAY,CAAC;AACpE;AAEA,QAAQ,IAAI,8BAA8B,OAAO,sBAAsB;"}
1
+ {"version":3,"file":"claude-context.js","names":[],"sources":["../../src/cli/claude-context.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * CLI script to install agent context for @happyvertical/graphql\n * Run the published context installer binary for this package.\n */\nimport { copyFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst Dirname = dirname(fileURLToPath(import.meta.url));\nconst pkgRoot = join(Dirname, '../..');\nconst targetDir = join(process.cwd(), '.claude');\n\nif (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n}\n\nconst pkgName = 'graphql';\nconst agentMdSrc = existsSync(join(pkgRoot, 'AGENT.md'))\n ? join(pkgRoot, 'AGENT.md')\n : join(pkgRoot, 'CLAUDE.md');\nconst metaSrc = existsSync(join(pkgRoot, 'metadata.json'))\n ? join(pkgRoot, 'metadata.json')\n : join(pkgRoot, '.claude-meta.json');\n\nif (existsSync(agentMdSrc)) {\n copyFileSync(agentMdSrc, join(targetDir, `have-${pkgName}.md`));\n}\n\nif (existsSync(metaSrc)) {\n copyFileSync(metaSrc, join(targetDir, `have-${pkgName}.meta.json`));\n}\n\nconsole.log(`✓ Installed @happyvertical/${pkgName} context to .claude/`);\n"],"mappings":";;;;;;;;;AAUA,IAAM,UAAU,KADA,QAAQ,cAAc,OAAO,KAAK,GAAG,CAChC,GAAS,OAAO;AACrC,IAAM,YAAY,KAAK,QAAQ,IAAI,GAAG,SAAS;AAE/C,IAAI,CAAC,WAAW,SAAS,GACvB,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAG1C,IAAM,UAAU;AAChB,IAAM,aAAa,WAAW,KAAK,SAAS,UAAU,CAAC,IACnD,KAAK,SAAS,UAAU,IACxB,KAAK,SAAS,WAAW;AAC7B,IAAM,UAAU,WAAW,KAAK,SAAS,eAAe,CAAC,IACrD,KAAK,SAAS,eAAe,IAC7B,KAAK,SAAS,mBAAmB;AAErC,IAAI,WAAW,UAAU,GACvB,aAAa,YAAY,KAAK,WAAW,QAAQ,QAAQ,IAAI,CAAC;AAGhE,IAAI,WAAW,OAAO,GACpB,aAAa,SAAS,KAAK,WAAW,QAAQ,QAAQ,WAAW,CAAC;AAGpE,QAAQ,IAAI,8BAA8B,QAAQ,qBAAqB"}
package/dist/index.js CHANGED
@@ -1,166 +1,201 @@
1
- var GraphQLErrorCode = /* @__PURE__ */ ((GraphQLErrorCode2) => {
2
- GraphQLErrorCode2["UNAUTHORIZED"] = "UNAUTHORIZED";
3
- GraphQLErrorCode2["NOT_FOUND"] = "NOT_FOUND";
4
- GraphQLErrorCode2["RATE_LIMITED"] = "RATE_LIMITED";
5
- GraphQLErrorCode2["NETWORK_ERROR"] = "NETWORK_ERROR";
6
- GraphQLErrorCode2["VALIDATION_ERROR"] = "VALIDATION_ERROR";
7
- GraphQLErrorCode2["UNKNOWN"] = "UNKNOWN";
8
- return GraphQLErrorCode2;
9
- })(GraphQLErrorCode || {});
10
- class GraphQLError extends Error {
11
- code;
12
- details;
13
- originalError;
14
- constructor(message, code, details, originalError) {
15
- super(message);
16
- this.name = "GraphQLError";
17
- this.code = code;
18
- this.details = details;
19
- this.originalError = originalError;
20
- }
21
- /**
22
- * Create error from HTTP status code
23
- */
24
- static fromHTTPStatus(status, message, originalError) {
25
- let code;
26
- switch (status) {
27
- case 401:
28
- code = "UNAUTHORIZED";
29
- break;
30
- case 403:
31
- code = "RATE_LIMITED";
32
- break;
33
- case 404:
34
- code = "NOT_FOUND";
35
- break;
36
- case 422:
37
- code = "VALIDATION_ERROR";
38
- break;
39
- default:
40
- code = "UNKNOWN";
41
- }
42
- return new GraphQLError(message, code, void 0, originalError);
43
- }
44
- /**
45
- * Create error from GraphQL response errors
46
- */
47
- static fromGraphQLErrors(errors) {
48
- const message = errors.map((e) => e.message).join("; ");
49
- return new GraphQLError(
50
- `GraphQL errors: ${message}`,
51
- "VALIDATION_ERROR",
52
- errors
53
- );
54
- }
55
- /**
56
- * Create network error
57
- */
58
- static networkError(message, originalError) {
59
- return new GraphQLError(
60
- message,
61
- "NETWORK_ERROR",
62
- void 0,
63
- originalError
64
- );
65
- }
66
- /**
67
- * Check if error is retryable
68
- */
69
- isRetryable() {
70
- return this.code === "RATE_LIMITED" || this.code === "NETWORK_ERROR";
71
- }
72
- }
73
- class GraphQLClient {
74
- endpoint;
75
- headers;
76
- constructor(config) {
77
- if (!config.endpoint) {
78
- throw new GraphQLError(
79
- "GraphQL endpoint is required",
80
- GraphQLError.fromHTTPStatus(400, "Missing endpoint").code
81
- );
82
- }
83
- this.endpoint = config.endpoint;
84
- this.headers = {
85
- "Content-Type": "application/json"
86
- };
87
- if (config.token) {
88
- this.headers.Authorization = `Bearer ${config.token}`;
89
- }
90
- if (config.headers) {
91
- Object.assign(this.headers, config.headers);
92
- }
93
- }
94
- /**
95
- * Execute a GraphQL query
96
- */
97
- async query(query, variables) {
98
- return this.execute(query, variables);
99
- }
100
- /**
101
- * Execute a GraphQL mutation
102
- */
103
- async mutate(mutation, variables) {
104
- return this.execute(mutation, variables);
105
- }
106
- /**
107
- * Execute GraphQL operation
108
- */
109
- async execute(operation, variables) {
110
- let response;
111
- try {
112
- response = await fetch(this.endpoint, {
113
- method: "POST",
114
- headers: this.headers,
115
- body: JSON.stringify({ query: operation, variables })
116
- });
117
- } catch (error) {
118
- throw GraphQLError.networkError(
119
- `Failed to connect to GraphQL API: ${error instanceof Error ? error.message : "Unknown error"}`,
120
- error
121
- );
122
- }
123
- if (!response.ok) {
124
- const errorText = await response.text();
125
- throw GraphQLError.fromHTTPStatus(
126
- response.status,
127
- `GraphQL error: ${response.statusText}
128
- ${errorText}`,
129
- errorText
130
- );
131
- }
132
- const result = await response.json();
133
- if (result.errors && result.errors.length > 0) {
134
- throw GraphQLError.fromGraphQLErrors(result.errors);
135
- }
136
- if (!result.data) {
137
- throw new GraphQLError(
138
- "GraphQL response contained no data",
139
- GraphQLError.fromHTTPStatus(500, "No data").code
140
- );
141
- }
142
- return result.data;
143
- }
144
- }
1
+ //#region src/errors.ts
2
+ /**
3
+ * Error codes for GraphQL operations
4
+ */
5
+ var GraphQLErrorCode = /* @__PURE__ */ function(GraphQLErrorCode) {
6
+ /** Authentication failed */
7
+ GraphQLErrorCode["UNAUTHORIZED"] = "UNAUTHORIZED";
8
+ /** Resource not found */
9
+ GraphQLErrorCode["NOT_FOUND"] = "NOT_FOUND";
10
+ /** Rate limit exceeded */
11
+ GraphQLErrorCode["RATE_LIMITED"] = "RATE_LIMITED";
12
+ /** Network error */
13
+ GraphQLErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
14
+ /** Invalid query or mutation */
15
+ GraphQLErrorCode["VALIDATION_ERROR"] = "VALIDATION_ERROR";
16
+ /** Unknown error */
17
+ GraphQLErrorCode["UNKNOWN"] = "UNKNOWN";
18
+ return GraphQLErrorCode;
19
+ }({});
20
+ /**
21
+ * GraphQL error class
22
+ */
23
+ var GraphQLError = class GraphQLError extends Error {
24
+ code;
25
+ details;
26
+ originalError;
27
+ constructor(message, code, details, originalError) {
28
+ super(message);
29
+ this.name = "GraphQLError";
30
+ this.code = code;
31
+ this.details = details;
32
+ this.originalError = originalError;
33
+ }
34
+ /**
35
+ * Create error from HTTP status code
36
+ */
37
+ static fromHTTPStatus(status, message, originalError) {
38
+ let code;
39
+ switch (status) {
40
+ case 401:
41
+ code = "UNAUTHORIZED";
42
+ break;
43
+ case 403:
44
+ code = "RATE_LIMITED";
45
+ break;
46
+ case 404:
47
+ code = "NOT_FOUND";
48
+ break;
49
+ case 422:
50
+ code = "VALIDATION_ERROR";
51
+ break;
52
+ default: code = "UNKNOWN";
53
+ }
54
+ return new GraphQLError(message, code, void 0, originalError);
55
+ }
56
+ /**
57
+ * Create error from GraphQL response errors
58
+ */
59
+ static fromGraphQLErrors(errors) {
60
+ const message = errors.map((e) => e.message).join("; ");
61
+ return new GraphQLError(`GraphQL errors: ${message}`, "VALIDATION_ERROR", errors);
62
+ }
63
+ /**
64
+ * Create network error
65
+ */
66
+ static networkError(message, originalError) {
67
+ return new GraphQLError(message, "NETWORK_ERROR", void 0, originalError);
68
+ }
69
+ /**
70
+ * Check if error is retryable
71
+ */
72
+ isRetryable() {
73
+ return this.code === "RATE_LIMITED" || this.code === "NETWORK_ERROR";
74
+ }
75
+ };
76
+ //#endregion
77
+ //#region src/client.ts
78
+ /**
79
+ * Generic GraphQL client
80
+ */
81
+ /**
82
+ * Generic GraphQL client implementation
83
+ *
84
+ * Works with any GraphQL endpoint - GitHub, GitLab, Shopify, custom APIs, etc.
85
+ */
86
+ var GraphQLClient = class {
87
+ endpoint;
88
+ headers;
89
+ constructor(config) {
90
+ if (!config.endpoint) throw new GraphQLError("GraphQL endpoint is required", GraphQLError.fromHTTPStatus(400, "Missing endpoint").code);
91
+ this.endpoint = config.endpoint;
92
+ this.headers = { "Content-Type": "application/json" };
93
+ if (config.token) this.headers.Authorization = `Bearer ${config.token}`;
94
+ if (config.headers) Object.assign(this.headers, config.headers);
95
+ }
96
+ /**
97
+ * Execute a GraphQL query
98
+ */
99
+ async query(query, variables) {
100
+ return this.execute(query, variables);
101
+ }
102
+ /**
103
+ * Execute a GraphQL mutation
104
+ */
105
+ async mutate(mutation, variables) {
106
+ return this.execute(mutation, variables);
107
+ }
108
+ /**
109
+ * Execute GraphQL operation
110
+ */
111
+ async execute(operation, variables) {
112
+ let response;
113
+ try {
114
+ response = await fetch(this.endpoint, {
115
+ method: "POST",
116
+ headers: this.headers,
117
+ body: JSON.stringify({
118
+ query: operation,
119
+ variables
120
+ })
121
+ });
122
+ } catch (error) {
123
+ throw GraphQLError.networkError(`Failed to connect to GraphQL API: ${error instanceof Error ? error.message : "Unknown error"}`, error);
124
+ }
125
+ if (!response.ok) {
126
+ const errorText = await response.text();
127
+ throw GraphQLError.fromHTTPStatus(response.status, `GraphQL error: ${response.statusText}\n${errorText}`, errorText);
128
+ }
129
+ const result = await response.json();
130
+ if (result.errors && result.errors.length > 0) throw GraphQLError.fromGraphQLErrors(result.errors);
131
+ if (!result.data) throw new GraphQLError("GraphQL response contained no data", GraphQLError.fromHTTPStatus(500, "No data").code);
132
+ return result.data;
133
+ }
134
+ };
135
+ //#endregion
136
+ //#region src/factory.ts
137
+ /**
138
+ * GraphQL client factory function
139
+ */
140
+ /**
141
+ * Check if value is already a GraphQL client instance
142
+ */
145
143
  function isGraphQLClientInstance(value) {
146
- return value !== null && typeof value === "object" && "query" in value && "mutate" in value && typeof value.query === "function" && typeof value.mutate === "function";
144
+ return value !== null && typeof value === "object" && "query" in value && "mutate" in value && typeof value.query === "function" && typeof value.mutate === "function";
147
145
  }
146
+ /**
147
+ * Get a GraphQL client instance
148
+ *
149
+ * This is the main entry point for creating GraphQL clients.
150
+ * It can accept either a configuration object or an existing client instance.
151
+ *
152
+ * @param options - GraphQL configuration or existing client instance
153
+ * @returns Promise resolving to GraphQL client interface
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * import { getGraphQLClient } from '@happyvertical/graphql';
158
+ *
159
+ * // Create a GitHub GraphQL client
160
+ * const github = await getGraphQLClient({
161
+ * endpoint: 'https://api.github.com/graphql',
162
+ * token: process.env.GITHUB_TOKEN
163
+ * });
164
+ *
165
+ * // Create a GitLab GraphQL client
166
+ * const gitlab = await getGraphQLClient({
167
+ * endpoint: 'https://gitlab.com/api/graphql',
168
+ * token: process.env.GITLAB_TOKEN
169
+ * });
170
+ *
171
+ * // Custom headers for other APIs
172
+ * const custom = await getGraphQLClient({
173
+ * endpoint: 'https://api.example.com/graphql',
174
+ * headers: {
175
+ * 'X-API-Key': 'my-api-key',
176
+ * 'X-Custom-Header': 'value'
177
+ * }
178
+ * });
179
+ *
180
+ * // Execute a query
181
+ * const result = await github.query<{ viewer: { login: string } }>(`
182
+ * query {
183
+ * viewer {
184
+ * login
185
+ * }
186
+ * }
187
+ * `);
188
+ *
189
+ * // Pass existing instance (returns it unchanged)
190
+ * const sameClient = await getGraphQLClient(github);
191
+ * ```
192
+ */
148
193
  async function getGraphQLClient(options) {
149
- if (isGraphQLClientInstance(options)) {
150
- return options;
151
- }
152
- if (!options.endpoint) {
153
- throw new GraphQLError(
154
- "GraphQL endpoint is required",
155
- GraphQLErrorCode.VALIDATION_ERROR
156
- );
157
- }
158
- return new GraphQLClient(options);
194
+ if (isGraphQLClientInstance(options)) return options;
195
+ if (!options.endpoint) throw new GraphQLError("GraphQL endpoint is required", GraphQLErrorCode.VALIDATION_ERROR);
196
+ return new GraphQLClient(options);
159
197
  }
160
- export {
161
- GraphQLClient,
162
- GraphQLError,
163
- GraphQLErrorCode,
164
- getGraphQLClient
165
- };
166
- //# sourceMappingURL=index.js.map
198
+ //#endregion
199
+ export { GraphQLClient, GraphQLError, GraphQLErrorCode, getGraphQLClient };
200
+
201
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/errors.ts","../src/client.ts","../src/factory.ts"],"sourcesContent":["/**\n * GraphQL error handling\n */\n\nimport type { GraphQLErrorDetail } from './types.js';\n\n/**\n * Error codes for GraphQL operations\n */\nexport enum GraphQLErrorCode {\n /** Authentication failed */\n UNAUTHORIZED = 'UNAUTHORIZED',\n /** Resource not found */\n NOT_FOUND = 'NOT_FOUND',\n /** Rate limit exceeded */\n RATE_LIMITED = 'RATE_LIMITED',\n /** Network error */\n NETWORK_ERROR = 'NETWORK_ERROR',\n /** Invalid query or mutation */\n VALIDATION_ERROR = 'VALIDATION_ERROR',\n /** Unknown error */\n UNKNOWN = 'UNKNOWN',\n}\n\n/**\n * GraphQL error class\n */\nexport class GraphQLError extends Error {\n readonly code: GraphQLErrorCode;\n readonly details?: GraphQLErrorDetail[];\n readonly originalError?: unknown;\n\n constructor(\n message: string,\n code: GraphQLErrorCode,\n details?: GraphQLErrorDetail[],\n originalError?: unknown,\n ) {\n super(message);\n this.name = 'GraphQLError';\n this.code = code;\n this.details = details;\n this.originalError = originalError;\n }\n\n /**\n * Create error from HTTP status code\n */\n static fromHTTPStatus(\n status: number,\n message: string,\n originalError?: unknown,\n ): GraphQLError {\n let code: GraphQLErrorCode;\n\n switch (status) {\n case 401:\n code = GraphQLErrorCode.UNAUTHORIZED;\n break;\n case 403:\n code = GraphQLErrorCode.RATE_LIMITED;\n break;\n case 404:\n code = GraphQLErrorCode.NOT_FOUND;\n break;\n case 422:\n code = GraphQLErrorCode.VALIDATION_ERROR;\n break;\n default:\n code = GraphQLErrorCode.UNKNOWN;\n }\n\n return new GraphQLError(message, code, undefined, originalError);\n }\n\n /**\n * Create error from GraphQL response errors\n */\n static fromGraphQLErrors(errors: GraphQLErrorDetail[]): GraphQLError {\n const message = errors.map((e) => e.message).join('; ');\n return new GraphQLError(\n `GraphQL errors: ${message}`,\n GraphQLErrorCode.VALIDATION_ERROR,\n errors,\n );\n }\n\n /**\n * Create network error\n */\n static networkError(message: string, originalError?: unknown): GraphQLError {\n return new GraphQLError(\n message,\n GraphQLErrorCode.NETWORK_ERROR,\n undefined,\n originalError,\n );\n }\n\n /**\n * Check if error is retryable\n */\n isRetryable(): boolean {\n return (\n this.code === GraphQLErrorCode.RATE_LIMITED ||\n this.code === GraphQLErrorCode.NETWORK_ERROR\n );\n }\n}\n","/**\n * Generic GraphQL client\n */\n\nimport { GraphQLError } from './errors.js';\nimport type {\n GraphQLConfig,\n GraphQLErrorDetail,\n IGraphQLClient,\n} from './types.js';\n\n/**\n * Generic GraphQL client implementation\n *\n * Works with any GraphQL endpoint - GitHub, GitLab, Shopify, custom APIs, etc.\n */\nexport class GraphQLClient implements IGraphQLClient {\n private readonly endpoint: string;\n private readonly headers: Record<string, string>;\n\n constructor(config: GraphQLConfig) {\n if (!config.endpoint) {\n throw new GraphQLError(\n 'GraphQL endpoint is required',\n GraphQLError.fromHTTPStatus(400, 'Missing endpoint').code,\n );\n }\n\n this.endpoint = config.endpoint;\n\n // Build headers - start with defaults\n this.headers = {\n 'Content-Type': 'application/json',\n };\n\n // Add Authorization if token provided\n if (config.token) {\n this.headers.Authorization = `Bearer ${config.token}`;\n }\n\n // Merge custom headers (can override defaults)\n if (config.headers) {\n Object.assign(this.headers, config.headers);\n }\n }\n\n /**\n * Execute a GraphQL query\n */\n async query<T>(\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<T> {\n return this.execute<T>(query, variables);\n }\n\n /**\n * Execute a GraphQL mutation\n */\n async mutate<T>(\n mutation: string,\n variables?: Record<string, unknown>,\n ): Promise<T> {\n return this.execute<T>(mutation, variables);\n }\n\n /**\n * Execute GraphQL operation\n */\n private async execute<T>(\n operation: string,\n variables?: Record<string, unknown>,\n ): Promise<T> {\n let response: Response;\n\n try {\n response = await fetch(this.endpoint, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify({ query: operation, variables }),\n });\n } catch (error) {\n throw GraphQLError.networkError(\n `Failed to connect to GraphQL API: ${error instanceof Error ? error.message : 'Unknown error'}`,\n error,\n );\n }\n\n if (!response.ok) {\n const errorText = await response.text();\n throw GraphQLError.fromHTTPStatus(\n response.status,\n `GraphQL error: ${response.statusText}\\n${errorText}`,\n errorText,\n );\n }\n\n const result = (await response.json()) as {\n data?: T;\n errors?: GraphQLErrorDetail[];\n };\n\n if (result.errors && result.errors.length > 0) {\n throw GraphQLError.fromGraphQLErrors(result.errors);\n }\n\n if (!result.data) {\n throw new GraphQLError(\n 'GraphQL response contained no data',\n GraphQLError.fromHTTPStatus(500, 'No data').code,\n );\n }\n\n return result.data;\n }\n}\n","/**\n * GraphQL client factory function\n */\n\nimport { GraphQLClient } from './client.js';\nimport { GraphQLError, GraphQLErrorCode } from './errors.js';\nimport type { GraphQLConfig, IGraphQLClient } from './types.js';\n\n/**\n * Check if value is already a GraphQL client instance\n */\nfunction isGraphQLClientInstance(value: unknown): value is IGraphQLClient {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'query' in value &&\n 'mutate' in value &&\n typeof (value as IGraphQLClient).query === 'function' &&\n typeof (value as IGraphQLClient).mutate === 'function'\n );\n}\n\n/**\n * Get a GraphQL client instance\n *\n * This is the main entry point for creating GraphQL clients.\n * It can accept either a configuration object or an existing client instance.\n *\n * @param options - GraphQL configuration or existing client instance\n * @returns Promise resolving to GraphQL client interface\n *\n * @example\n * ```typescript\n * import { getGraphQLClient } from '@happyvertical/graphql';\n *\n * // Create a GitHub GraphQL client\n * const github = await getGraphQLClient({\n * endpoint: 'https://api.github.com/graphql',\n * token: process.env.GITHUB_TOKEN\n * });\n *\n * // Create a GitLab GraphQL client\n * const gitlab = await getGraphQLClient({\n * endpoint: 'https://gitlab.com/api/graphql',\n * token: process.env.GITLAB_TOKEN\n * });\n *\n * // Custom headers for other APIs\n * const custom = await getGraphQLClient({\n * endpoint: 'https://api.example.com/graphql',\n * headers: {\n * 'X-API-Key': 'my-api-key',\n * 'X-Custom-Header': 'value'\n * }\n * });\n *\n * // Execute a query\n * const result = await github.query<{ viewer: { login: string } }>(`\n * query {\n * viewer {\n * login\n * }\n * }\n * `);\n *\n * // Pass existing instance (returns it unchanged)\n * const sameClient = await getGraphQLClient(github);\n * ```\n */\nexport async function getGraphQLClient(\n options: GraphQLConfig | IGraphQLClient,\n): Promise<IGraphQLClient> {\n // If already a client instance, return it\n if (isGraphQLClientInstance(options)) {\n return options;\n }\n\n // Validate configuration\n if (!options.endpoint) {\n throw new GraphQLError(\n 'GraphQL endpoint is required',\n GraphQLErrorCode.VALIDATION_ERROR,\n );\n }\n\n return new GraphQLClient(options);\n}\n"],"names":["GraphQLErrorCode"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/errors.ts","../src/client.ts","../src/factory.ts"],"sourcesContent":["/**\n * GraphQL error handling\n */\n\nimport type { GraphQLErrorDetail } from './types.js';\n\n/**\n * Error codes for GraphQL operations\n */\nexport enum GraphQLErrorCode {\n /** Authentication failed */\n UNAUTHORIZED = 'UNAUTHORIZED',\n /** Resource not found */\n NOT_FOUND = 'NOT_FOUND',\n /** Rate limit exceeded */\n RATE_LIMITED = 'RATE_LIMITED',\n /** Network error */\n NETWORK_ERROR = 'NETWORK_ERROR',\n /** Invalid query or mutation */\n VALIDATION_ERROR = 'VALIDATION_ERROR',\n /** Unknown error */\n UNKNOWN = 'UNKNOWN',\n}\n\n/**\n * GraphQL error class\n */\nexport class GraphQLError extends Error {\n readonly code: GraphQLErrorCode;\n readonly details?: GraphQLErrorDetail[];\n readonly originalError?: unknown;\n\n constructor(\n message: string,\n code: GraphQLErrorCode,\n details?: GraphQLErrorDetail[],\n originalError?: unknown,\n ) {\n super(message);\n this.name = 'GraphQLError';\n this.code = code;\n this.details = details;\n this.originalError = originalError;\n }\n\n /**\n * Create error from HTTP status code\n */\n static fromHTTPStatus(\n status: number,\n message: string,\n originalError?: unknown,\n ): GraphQLError {\n let code: GraphQLErrorCode;\n\n switch (status) {\n case 401:\n code = GraphQLErrorCode.UNAUTHORIZED;\n break;\n case 403:\n code = GraphQLErrorCode.RATE_LIMITED;\n break;\n case 404:\n code = GraphQLErrorCode.NOT_FOUND;\n break;\n case 422:\n code = GraphQLErrorCode.VALIDATION_ERROR;\n break;\n default:\n code = GraphQLErrorCode.UNKNOWN;\n }\n\n return new GraphQLError(message, code, undefined, originalError);\n }\n\n /**\n * Create error from GraphQL response errors\n */\n static fromGraphQLErrors(errors: GraphQLErrorDetail[]): GraphQLError {\n const message = errors.map((e) => e.message).join('; ');\n return new GraphQLError(\n `GraphQL errors: ${message}`,\n GraphQLErrorCode.VALIDATION_ERROR,\n errors,\n );\n }\n\n /**\n * Create network error\n */\n static networkError(message: string, originalError?: unknown): GraphQLError {\n return new GraphQLError(\n message,\n GraphQLErrorCode.NETWORK_ERROR,\n undefined,\n originalError,\n );\n }\n\n /**\n * Check if error is retryable\n */\n isRetryable(): boolean {\n return (\n this.code === GraphQLErrorCode.RATE_LIMITED ||\n this.code === GraphQLErrorCode.NETWORK_ERROR\n );\n }\n}\n","/**\n * Generic GraphQL client\n */\n\nimport { GraphQLError } from './errors.js';\nimport type {\n GraphQLConfig,\n GraphQLErrorDetail,\n IGraphQLClient,\n} from './types.js';\n\n/**\n * Generic GraphQL client implementation\n *\n * Works with any GraphQL endpoint - GitHub, GitLab, Shopify, custom APIs, etc.\n */\nexport class GraphQLClient implements IGraphQLClient {\n private readonly endpoint: string;\n private readonly headers: Record<string, string>;\n\n constructor(config: GraphQLConfig) {\n if (!config.endpoint) {\n throw new GraphQLError(\n 'GraphQL endpoint is required',\n GraphQLError.fromHTTPStatus(400, 'Missing endpoint').code,\n );\n }\n\n this.endpoint = config.endpoint;\n\n // Build headers - start with defaults\n this.headers = {\n 'Content-Type': 'application/json',\n };\n\n // Add Authorization if token provided\n if (config.token) {\n this.headers.Authorization = `Bearer ${config.token}`;\n }\n\n // Merge custom headers (can override defaults)\n if (config.headers) {\n Object.assign(this.headers, config.headers);\n }\n }\n\n /**\n * Execute a GraphQL query\n */\n async query<T>(\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<T> {\n return this.execute<T>(query, variables);\n }\n\n /**\n * Execute a GraphQL mutation\n */\n async mutate<T>(\n mutation: string,\n variables?: Record<string, unknown>,\n ): Promise<T> {\n return this.execute<T>(mutation, variables);\n }\n\n /**\n * Execute GraphQL operation\n */\n private async execute<T>(\n operation: string,\n variables?: Record<string, unknown>,\n ): Promise<T> {\n let response: Response;\n\n try {\n response = await fetch(this.endpoint, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify({ query: operation, variables }),\n });\n } catch (error) {\n throw GraphQLError.networkError(\n `Failed to connect to GraphQL API: ${error instanceof Error ? error.message : 'Unknown error'}`,\n error,\n );\n }\n\n if (!response.ok) {\n const errorText = await response.text();\n throw GraphQLError.fromHTTPStatus(\n response.status,\n `GraphQL error: ${response.statusText}\\n${errorText}`,\n errorText,\n );\n }\n\n const result = (await response.json()) as {\n data?: T;\n errors?: GraphQLErrorDetail[];\n };\n\n if (result.errors && result.errors.length > 0) {\n throw GraphQLError.fromGraphQLErrors(result.errors);\n }\n\n if (!result.data) {\n throw new GraphQLError(\n 'GraphQL response contained no data',\n GraphQLError.fromHTTPStatus(500, 'No data').code,\n );\n }\n\n return result.data;\n }\n}\n","/**\n * GraphQL client factory function\n */\n\nimport { GraphQLClient } from './client.js';\nimport { GraphQLError, GraphQLErrorCode } from './errors.js';\nimport type { GraphQLConfig, IGraphQLClient } from './types.js';\n\n/**\n * Check if value is already a GraphQL client instance\n */\nfunction isGraphQLClientInstance(value: unknown): value is IGraphQLClient {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'query' in value &&\n 'mutate' in value &&\n typeof (value as IGraphQLClient).query === 'function' &&\n typeof (value as IGraphQLClient).mutate === 'function'\n );\n}\n\n/**\n * Get a GraphQL client instance\n *\n * This is the main entry point for creating GraphQL clients.\n * It can accept either a configuration object or an existing client instance.\n *\n * @param options - GraphQL configuration or existing client instance\n * @returns Promise resolving to GraphQL client interface\n *\n * @example\n * ```typescript\n * import { getGraphQLClient } from '@happyvertical/graphql';\n *\n * // Create a GitHub GraphQL client\n * const github = await getGraphQLClient({\n * endpoint: 'https://api.github.com/graphql',\n * token: process.env.GITHUB_TOKEN\n * });\n *\n * // Create a GitLab GraphQL client\n * const gitlab = await getGraphQLClient({\n * endpoint: 'https://gitlab.com/api/graphql',\n * token: process.env.GITLAB_TOKEN\n * });\n *\n * // Custom headers for other APIs\n * const custom = await getGraphQLClient({\n * endpoint: 'https://api.example.com/graphql',\n * headers: {\n * 'X-API-Key': 'my-api-key',\n * 'X-Custom-Header': 'value'\n * }\n * });\n *\n * // Execute a query\n * const result = await github.query<{ viewer: { login: string } }>(`\n * query {\n * viewer {\n * login\n * }\n * }\n * `);\n *\n * // Pass existing instance (returns it unchanged)\n * const sameClient = await getGraphQLClient(github);\n * ```\n */\nexport async function getGraphQLClient(\n options: GraphQLConfig | IGraphQLClient,\n): Promise<IGraphQLClient> {\n // If already a client instance, return it\n if (isGraphQLClientInstance(options)) {\n return options;\n }\n\n // Validate configuration\n if (!options.endpoint) {\n throw new GraphQLError(\n 'GraphQL endpoint is required',\n GraphQLErrorCode.VALIDATION_ERROR,\n );\n }\n\n return new GraphQLClient(options);\n}\n"],"mappings":"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"}
package/metadata.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "path": "packages/graphql",
4
4
  "position": {
5
5
  "index": 14,
6
- "count": 31
6
+ "count": 32
7
7
  },
8
8
  "description": "GitHub GraphQL client for SDK packages",
9
9
  "provides": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/graphql",
3
- "version": "0.79.0",
3
+ "version": "0.80.1",
4
4
  "description": "GitHub GraphQL client for SDK packages",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,10 +16,10 @@
16
16
  },
17
17
  "devDependencies": {
18
18
  "@types/node": "25.0.10",
19
- "typescript": "^5.9.3",
20
- "vite": "7.3.2",
19
+ "typescript": "5.9.3",
20
+ "vite": "8.1.4",
21
21
  "vite-plugin-dts": "4.5.4",
22
- "vitest": "4.1.5"
22
+ "vitest": "4.1.10"
23
23
  },
24
24
  "files": [
25
25
  "dist",