@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 +1 -1
- package/dist/cli/claude-context.js +17 -17
- package/dist/cli/claude-context.js.map +1 -1
- package/dist/index.js +197 -162
- package/dist/index.js.map +1 -1
- package/metadata.json +1 -1
- package/package.json +4 -4
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
|
|
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
|
|
2
|
+
import { copyFileSync, existsSync, mkdirSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
//#
|
|
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"],"
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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
|
-
|
|
150
|
-
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/graphql",
|
|
3
|
-
"version": "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": "
|
|
20
|
-
"vite": "
|
|
19
|
+
"typescript": "5.9.3",
|
|
20
|
+
"vite": "8.1.4",
|
|
21
21
|
"vite-plugin-dts": "4.5.4",
|
|
22
|
-
"vitest": "4.1.
|
|
22
|
+
"vitest": "4.1.10"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
25
|
"dist",
|