gh-inari 0.1.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -0
  3. package/dist/artifact.d.ts +82 -0
  4. package/dist/artifact.js +472 -0
  5. package/dist/artifact.js.map +1 -0
  6. package/dist/cli.d.ts +14 -0
  7. package/dist/cli.js +395 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/contract/index.d.ts +4 -0
  10. package/dist/contract/index.js +5 -0
  11. package/dist/contract/index.js.map +1 -0
  12. package/dist/contract/ir.d.ts +178 -0
  13. package/dist/contract/ir.js +1071 -0
  14. package/dist/contract/ir.js.map +1 -0
  15. package/dist/contract/issue-form.d.ts +38 -0
  16. package/dist/contract/issue-form.js +662 -0
  17. package/dist/contract/issue-form.js.map +1 -0
  18. package/dist/contract/schema.d.ts +48 -0
  19. package/dist/contract/schema.js +162 -0
  20. package/dist/contract/schema.js.map +1 -0
  21. package/dist/contract/validation.d.ts +24 -0
  22. package/dist/contract/validation.js +212 -0
  23. package/dist/contract/validation.js.map +1 -0
  24. package/dist/github/adapter.d.ts +48 -0
  25. package/dist/github/adapter.js +463 -0
  26. package/dist/github/adapter.js.map +1 -0
  27. package/dist/github/errors.d.ts +43 -0
  28. package/dist/github/errors.js +65 -0
  29. package/dist/github/errors.js.map +1 -0
  30. package/dist/github/index.d.ts +4 -0
  31. package/dist/github/index.js +5 -0
  32. package/dist/github/index.js.map +1 -0
  33. package/dist/github/transport.d.ts +19 -0
  34. package/dist/github/transport.js +54 -0
  35. package/dist/github/transport.js.map +1 -0
  36. package/dist/github/types.d.ts +62 -0
  37. package/dist/github/types.js +16 -0
  38. package/dist/github/types.js.map +1 -0
  39. package/dist/github.d.ts +1 -0
  40. package/dist/github.js +2 -0
  41. package/dist/github.js.map +1 -0
  42. package/dist/index.d.ts +10 -0
  43. package/dist/index.js +32 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/pr-policy.d.ts +39 -0
  46. package/dist/pr-policy.js +313 -0
  47. package/dist/pr-policy.js.map +1 -0
  48. package/dist/pull-request-template.d.ts +42 -0
  49. package/dist/pull-request-template.js +481 -0
  50. package/dist/pull-request-template.js.map +1 -0
  51. package/dist/template-discovery.d.ts +68 -0
  52. package/dist/template-discovery.js +431 -0
  53. package/dist/template-discovery.js.map +1 -0
  54. package/gh-inari +18 -0
  55. package/package.json +92 -0
@@ -0,0 +1,463 @@
1
+ import { ContractViolationError, GhNotInstalledError, GhUnauthenticatedError, GitHubApiError, GitHubApiResponseError, GitHubTransportError, InvalidRepositoryOverrideError, RepositoryResolutionError, } from "./errors.js";
2
+ import { ProcessGhTransport } from "./transport.js";
3
+ import { VALIDATED_RENDERED_PHASE, } from "./types.js";
4
+ const DEFAULT_HOSTNAME = "github.com";
5
+ const UNAUTHENTICATED_MESSAGE_PATTERN = /not logged in|authentication failed|login required|status code 401|\b401\b/iu;
6
+ export class GitHubAdapter {
7
+ cwd;
8
+ repository;
9
+ hostname;
10
+ transport;
11
+ executable;
12
+ availablePromise;
13
+ contextPromise;
14
+ authenticatedHostnames = new Set();
15
+ authenticationPromises = new Map();
16
+ constructor(options = {}) {
17
+ this.cwd = options.cwd;
18
+ this.repository = options.repository;
19
+ this.hostname = options.hostname;
20
+ this.transport = options.transport ?? new ProcessGhTransport();
21
+ this.executable = this.transport instanceof ProcessGhTransport ? this.transport.executable : "gh";
22
+ }
23
+ async checkAuthentication() {
24
+ await this.ensureGhAvailable();
25
+ await this.ensureAuthenticated(this.repositoryHostOverride());
26
+ }
27
+ async resolveRepositoryContext() {
28
+ if (this.contextPromise === undefined) {
29
+ this.contextPromise = this.resolveRepositoryContextOnce();
30
+ }
31
+ return this.contextPromise;
32
+ }
33
+ async getRepositoryContext() {
34
+ return this.resolveRepositoryContext();
35
+ }
36
+ async getIssue(issueNumber) {
37
+ assertIssueNumber(issueNumber, "issue_number");
38
+ const context = await this.resolveRepositoryContext();
39
+ const result = await this.runApi(this.apiArguments(context, `repos/${context.nameWithOwner}/issues/${issueNumber}`, "GET"), "issue.read");
40
+ return parseIssue(result, "issue.read");
41
+ }
42
+ async readIssue(issueNumber) {
43
+ return this.getIssue(issueNumber);
44
+ }
45
+ async getPullRequest(pullRequestNumber) {
46
+ assertIssueNumber(pullRequestNumber, "pull_request_number");
47
+ const context = await this.resolveRepositoryContext();
48
+ const result = await this.runApi(this.apiArguments(context, `repos/${context.nameWithOwner}/pulls/${pullRequestNumber}`, "GET"), "pull_request.read");
49
+ return parsePullRequest(result, "pull_request.read");
50
+ }
51
+ async readPullRequest(pullRequestNumber) {
52
+ return this.getPullRequest(pullRequestNumber);
53
+ }
54
+ async createIssue(artifact) {
55
+ assertValidatedRenderedIssueArtifact(artifact);
56
+ const context = await this.resolveRepositoryContext();
57
+ const args = this.apiArguments(context, `repos/${context.nameWithOwner}/issues`, "POST");
58
+ appendRawField(args, "title", artifact.title);
59
+ appendRawField(args, "body", artifact.body);
60
+ appendRawFields(args, "labels[]", artifact.labels);
61
+ appendRawFields(args, "assignees[]", artifact.assignees);
62
+ const result = await this.runApi(args, "issue.create");
63
+ return parseIssue(result, "issue.create");
64
+ }
65
+ async updateIssue(issueNumber, artifact) {
66
+ assertIssueNumber(issueNumber, "issue_number");
67
+ assertValidatedRenderedIssueArtifact(artifact);
68
+ const context = await this.resolveRepositoryContext();
69
+ const args = this.apiArguments(context, `repos/${context.nameWithOwner}/issues/${issueNumber}`, "PATCH");
70
+ appendRawField(args, "title", artifact.title);
71
+ appendRawField(args, "body", artifact.body);
72
+ appendRawFields(args, "labels[]", artifact.labels);
73
+ appendRawFields(args, "assignees[]", artifact.assignees);
74
+ const result = await this.runApi(args, "issue.update");
75
+ return parseIssue(result, "issue.update");
76
+ }
77
+ async createPullRequest(artifact) {
78
+ assertValidatedRenderedPullRequestArtifact(artifact);
79
+ const context = await this.resolveRepositoryContext();
80
+ const args = this.apiArguments(context, `repos/${context.nameWithOwner}/pulls`, "POST");
81
+ appendRawField(args, "title", artifact.title);
82
+ appendRawField(args, "body", artifact.body);
83
+ appendRawField(args, "head", artifact.head);
84
+ appendRawField(args, "base", artifact.base);
85
+ appendBooleanField(args, "draft", artifact.draft);
86
+ appendBooleanField(args, "maintainer_can_modify", artifact.maintainerCanModify);
87
+ const result = await this.runApi(args, "pull_request.create");
88
+ return parsePullRequest(result, "pull_request.create");
89
+ }
90
+ async updatePullRequest(pullRequestNumber, artifact) {
91
+ assertIssueNumber(pullRequestNumber, "pull_request_number");
92
+ assertValidatedRenderedPullRequestArtifact(artifact);
93
+ const context = await this.resolveRepositoryContext();
94
+ const args = this.apiArguments(context, `repos/${context.nameWithOwner}/pulls/${pullRequestNumber}`, "PATCH");
95
+ appendRawField(args, "title", artifact.title);
96
+ appendRawField(args, "body", artifact.body);
97
+ appendRawField(args, "base", artifact.base);
98
+ appendBooleanField(args, "draft", artifact.draft);
99
+ appendBooleanField(args, "maintainer_can_modify", artifact.maintainerCanModify);
100
+ const result = await this.runApi(args, "pull_request.update");
101
+ return parsePullRequest(result, "pull_request.update");
102
+ }
103
+ async resolveRepositoryContextOnce() {
104
+ await this.ensureGhAvailable();
105
+ const override = this.repositoryOverride();
106
+ if (override !== undefined) {
107
+ await this.ensureAuthenticated(override.hostname);
108
+ return override;
109
+ }
110
+ await this.ensureAuthenticated(this.normalizedHostname());
111
+ const result = await this.runCommand(["repo", "view", "--json", "nameWithOwner,url"], "repository.resolve");
112
+ if (result.exitCode !== 0) {
113
+ if (UNAUTHENTICATED_MESSAGE_PATTERN.test(result.stderr)) {
114
+ throw new GhUnauthenticatedError(this.normalizedHostname(), summarize(result.stderr));
115
+ }
116
+ throw new RepositoryResolutionError("Unable to resolve the GitHub repository from the current working directory. Check the git remote or provide a repository override.", { operation: "repository.resolve", exitCode: result.exitCode, stderr: summarize(result.stderr) });
117
+ }
118
+ let payload;
119
+ try {
120
+ payload = JSON.parse(result.stdout);
121
+ }
122
+ catch (error) {
123
+ throw new RepositoryResolutionError("gh returned invalid JSON while resolving the current repository.", { operation: "repository.resolve", response: summarize(result.stdout) }, error);
124
+ }
125
+ if (!isRecord(payload) || typeof payload.nameWithOwner !== "string") {
126
+ throw new RepositoryResolutionError("gh returned no valid repository nameWithOwner for the current working directory.", { operation: "repository.resolve", response: summarize(result.stdout) });
127
+ }
128
+ try {
129
+ return repositoryContextFromNameWithOwner(payload.nameWithOwner, typeof payload.url === "string" ? payload.url : undefined, this.normalizedHostname() ?? DEFAULT_HOSTNAME);
130
+ }
131
+ catch (error) {
132
+ if (error instanceof RepositoryResolutionError)
133
+ throw error;
134
+ throw new RepositoryResolutionError("gh returned an invalid repository identity.", { operation: "repository.resolve", response: summarize(result.stdout) }, error);
135
+ }
136
+ }
137
+ repositoryOverride() {
138
+ if (this.repository === undefined)
139
+ return undefined;
140
+ return parseRepositoryOverride(this.repository, this.normalizedHostname() ?? DEFAULT_HOSTNAME);
141
+ }
142
+ repositoryHostOverride() {
143
+ const override = this.repositoryOverride();
144
+ if (override !== undefined)
145
+ return override.hostname;
146
+ return this.normalizedHostname();
147
+ }
148
+ normalizedHostname() {
149
+ if (this.hostname === undefined)
150
+ return undefined;
151
+ const value = this.hostname.trim().toLowerCase();
152
+ if (!isValidHostname(value))
153
+ throw new InvalidRepositoryOverrideError(this.hostname);
154
+ return value;
155
+ }
156
+ async ensureGhAvailable() {
157
+ if (this.availablePromise === undefined) {
158
+ this.availablePromise = this.ensureGhAvailableOnce();
159
+ }
160
+ return this.availablePromise;
161
+ }
162
+ async ensureGhAvailableOnce() {
163
+ const result = await this.runCommand(["--version"], "gh.version");
164
+ if (result.exitCode !== 0) {
165
+ throw new GhNotInstalledError(this.executable);
166
+ }
167
+ }
168
+ async ensureAuthenticated(hostname) {
169
+ if (this.authenticatedHostnames.has(hostname))
170
+ return;
171
+ let pending = this.authenticationPromises.get(hostname);
172
+ if (pending === undefined) {
173
+ pending = this.ensureAuthenticatedOnce(hostname);
174
+ this.authenticationPromises.set(hostname, pending);
175
+ pending
176
+ .catch(() => undefined)
177
+ .finally(() => {
178
+ this.authenticationPromises.delete(hostname);
179
+ });
180
+ }
181
+ return pending;
182
+ }
183
+ async ensureAuthenticatedOnce(hostname) {
184
+ const args = ["auth", "status"];
185
+ if (hostname !== undefined)
186
+ args.push("--hostname", hostname);
187
+ const result = await this.runCommand(args, "auth.status");
188
+ if (result.exitCode !== 0) {
189
+ throw new GhUnauthenticatedError(hostname, summarize(result.stderr));
190
+ }
191
+ this.authenticatedHostnames.add(hostname);
192
+ }
193
+ async runApi(args, operation) {
194
+ const result = await this.runCommand(args, operation);
195
+ if (result.exitCode !== 0) {
196
+ throw new GitHubApiError(operation, `GitHub API request failed during ${operation}.`, {
197
+ exitCode: result.exitCode,
198
+ stderr: summarize(result.stderr),
199
+ });
200
+ }
201
+ return parseJson(result.stdout, operation);
202
+ }
203
+ async runCommand(args, operation) {
204
+ try {
205
+ return await this.transport.run(args, { cwd: this.cwd });
206
+ }
207
+ catch (error) {
208
+ if (isErrno(error, "ENOENT"))
209
+ throw new GhNotInstalledError(this.executable, error);
210
+ throw new GitHubTransportError(operation, `Unable to execute gh during ${operation}.`, { stderr: error instanceof Error ? summarize(error.message) : undefined }, error);
211
+ }
212
+ }
213
+ apiArguments(context, endpoint, method) {
214
+ return ["api", endpoint, "--hostname", context.hostname, "--method", method];
215
+ }
216
+ }
217
+ function assertIssueNumber(value, path) {
218
+ if (!Number.isSafeInteger(value) || value < 1) {
219
+ throw new ContractViolationError("GitHub artifact number must be a positive integer.", path);
220
+ }
221
+ }
222
+ export function assertValidatedRenderedIssueArtifact(artifact) {
223
+ assertArtifactBase(artifact, "issue");
224
+ if (!isRecord(artifact))
225
+ return;
226
+ assertStringArray(artifact.labels, "labels");
227
+ assertStringArray(artifact.assignees, "assignees");
228
+ }
229
+ export function assertValidatedRenderedPullRequestArtifact(artifact) {
230
+ assertArtifactBase(artifact, "pull_request");
231
+ if (!isRecord(artifact))
232
+ return;
233
+ assertString(artifact.head, "head");
234
+ assertString(artifact.base, "base");
235
+ assertOptionalBoolean(artifact.draft, "draft");
236
+ assertOptionalBoolean(artifact.maintainerCanModify, "maintainerCanModify");
237
+ }
238
+ function assertArtifactBase(artifact, kind) {
239
+ if (!isRecord(artifact))
240
+ throw new ContractViolationError("Mutation requires a validated rendered artifact.");
241
+ if (artifact.phase !== VALIDATED_RENDERED_PHASE) {
242
+ throw new ContractViolationError("Mutation requires an artifact produced after contract validation and rendering.", "phase");
243
+ }
244
+ if (artifact.kind !== kind) {
245
+ throw new ContractViolationError(`Expected a validated rendered ${kind} artifact.`, "kind");
246
+ }
247
+ assertString(artifact.title, "title");
248
+ assertString(artifact.body, "body");
249
+ }
250
+ function assertString(value, path) {
251
+ if (typeof value !== "string")
252
+ throw new ContractViolationError(`Artifact field ${path} must be a string.`, path);
253
+ }
254
+ function assertStringArray(value, path) {
255
+ if (value === undefined)
256
+ return;
257
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
258
+ throw new ContractViolationError(`Artifact field ${path} must be an array of strings.`, path);
259
+ }
260
+ }
261
+ function assertOptionalBoolean(value, path) {
262
+ if (value !== undefined && typeof value !== "boolean") {
263
+ throw new ContractViolationError(`Artifact field ${path} must be a boolean.`, path);
264
+ }
265
+ }
266
+ function appendRawField(args, name, value) {
267
+ if (value !== undefined)
268
+ args.push("--raw-field", `${name}=${value}`);
269
+ }
270
+ function appendRawFields(args, name, values) {
271
+ if (values === undefined)
272
+ return;
273
+ for (const value of values)
274
+ args.push("--raw-field", `${name}=${value}`);
275
+ }
276
+ function appendBooleanField(args, name, value) {
277
+ if (value !== undefined)
278
+ args.push("--field", `${name}=${value ? "true" : "false"}`);
279
+ }
280
+ function parseJson(value, operation) {
281
+ try {
282
+ return JSON.parse(value);
283
+ }
284
+ catch (error) {
285
+ throw new GitHubApiResponseError(operation, `gh returned invalid JSON during ${operation}.`, { response: summarize(value) }, error);
286
+ }
287
+ }
288
+ function parseIssue(value, operation) {
289
+ const record = responseRecord(value, operation);
290
+ const number = responseNumber(record.number, "number", operation);
291
+ const title = responseString(record.title, "title", operation);
292
+ const state = responseState(record.state, operation);
293
+ const url = responseUrl(record, operation);
294
+ const body = record.body === null ? null : responseString(record.body, "body", operation);
295
+ return {
296
+ number,
297
+ title,
298
+ body,
299
+ state,
300
+ url,
301
+ labels: responseNames(record.labels, "labels", operation),
302
+ assignees: responseNames(record.assignees, "assignees", operation),
303
+ };
304
+ }
305
+ function parsePullRequest(value, operation) {
306
+ const record = responseRecord(value, operation);
307
+ const number = responseNumber(record.number, "number", operation);
308
+ const title = responseString(record.title, "title", operation);
309
+ const state = responseState(record.state, operation);
310
+ const url = responseUrl(record, operation);
311
+ const body = record.body === null ? null : responseString(record.body, "body", operation);
312
+ const head = responseRef(record.head, "head", operation);
313
+ const base = responseRef(record.base, "base", operation);
314
+ return {
315
+ number,
316
+ title,
317
+ body,
318
+ state,
319
+ url,
320
+ draft: record.draft === true,
321
+ head,
322
+ base,
323
+ };
324
+ }
325
+ function responseRecord(value, operation) {
326
+ if (!isRecord(value)) {
327
+ throw new GitHubApiResponseError(operation, `GitHub returned an invalid object during ${operation}.`);
328
+ }
329
+ return value;
330
+ }
331
+ function responseNumber(value, path, operation) {
332
+ if (typeof value !== "number" || !Number.isSafeInteger(value)) {
333
+ throw new GitHubApiResponseError(operation, `GitHub response field ${path} is invalid during ${operation}.`, {
334
+ path,
335
+ });
336
+ }
337
+ return value;
338
+ }
339
+ function responseString(value, path, operation) {
340
+ if (typeof value !== "string") {
341
+ throw new GitHubApiResponseError(operation, `GitHub response field ${path} is invalid during ${operation}.`, {
342
+ path,
343
+ });
344
+ }
345
+ return value;
346
+ }
347
+ function responseState(value, operation) {
348
+ if (value !== "open" && value !== "closed") {
349
+ throw new GitHubApiResponseError(operation, `GitHub response state is invalid during ${operation}.`, {
350
+ path: "state",
351
+ });
352
+ }
353
+ return value;
354
+ }
355
+ function responseUrl(record, operation) {
356
+ return responseString(record.html_url ?? record.url, "url", operation);
357
+ }
358
+ function responseNames(value, path, operation) {
359
+ if (!Array.isArray(value)) {
360
+ throw new GitHubApiResponseError(operation, `GitHub response field ${path} is invalid during ${operation}.`, {
361
+ path,
362
+ });
363
+ }
364
+ return value.map((item, index) => {
365
+ if (!isRecord(item)) {
366
+ throw new GitHubApiResponseError(operation, `GitHub response field ${path}[${index}] is invalid during ${operation}.`, { path: `${path}[${index}]` });
367
+ }
368
+ return responseString(item.name ?? item.login, `${path}[${index}]`, operation);
369
+ });
370
+ }
371
+ function responseRef(value, path, operation) {
372
+ if (!isRecord(value)) {
373
+ throw new GitHubApiResponseError(operation, `GitHub response field ${path} is invalid during ${operation}.`, {
374
+ path,
375
+ });
376
+ }
377
+ return responseString(value.ref, `${path}.ref`, operation);
378
+ }
379
+ function parseRepositoryOverride(repository, fallbackHostname) {
380
+ const value = repository.trim();
381
+ if (value.length === 0)
382
+ throw new InvalidRepositoryOverrideError(repository);
383
+ if (/^https?:\/\//iu.test(value)) {
384
+ try {
385
+ const url = new URL(value);
386
+ const parts = url.pathname.split("/").filter(Boolean);
387
+ if (parts.length !== 2)
388
+ throw new Error("repository URL path must contain owner and name");
389
+ const name = parts[1].replace(/\.git$/iu, "");
390
+ return repositoryContext(url.hostname, parts[0], name, url.toString());
391
+ }
392
+ catch (error) {
393
+ throw new InvalidRepositoryOverrideError(repository, error);
394
+ }
395
+ }
396
+ const parts = value.split("/");
397
+ try {
398
+ if (parts.length === 2)
399
+ return repositoryContext(fallbackHostname, parts[0], parts[1]);
400
+ if (parts.length === 3)
401
+ return repositoryContext(parts[0], parts[1], parts[2]);
402
+ }
403
+ catch (error) {
404
+ throw new InvalidRepositoryOverrideError(repository, error);
405
+ }
406
+ throw new InvalidRepositoryOverrideError(repository);
407
+ }
408
+ function repositoryContextFromNameWithOwner(nameWithOwner, url, fallbackHostname) {
409
+ const parts = nameWithOwner.split("/");
410
+ if (parts.length !== 2) {
411
+ throw new RepositoryResolutionError("Repository nameWithOwner must contain exactly owner/name.", {
412
+ path: "nameWithOwner",
413
+ });
414
+ }
415
+ const hostname = url === undefined ? fallbackHostname : repositoryUrlHostname(url, fallbackHostname);
416
+ return repositoryContext(hostname, parts[0], parts[1], url);
417
+ }
418
+ function repositoryContext(hostname, owner, name, url) {
419
+ const normalizedHostname = hostname.trim().toLowerCase();
420
+ if (!isValidHostname(normalizedHostname) || !isValidRepositorySegment(owner) || !isValidRepositorySegment(name)) {
421
+ throw new RepositoryResolutionError("Repository identity contains an invalid hostname, owner, or name.", {
422
+ path: "repository",
423
+ });
424
+ }
425
+ const nameWithOwner = `${owner}/${name}`;
426
+ return Object.freeze({
427
+ hostname: normalizedHostname,
428
+ host: normalizedHostname,
429
+ owner,
430
+ name,
431
+ nameWithOwner,
432
+ url: url ?? `https://${normalizedHostname}/${nameWithOwner}`,
433
+ });
434
+ }
435
+ function repositoryUrlHostname(url, fallbackHostname) {
436
+ try {
437
+ return new URL(url).hostname;
438
+ }
439
+ catch {
440
+ return fallbackHostname;
441
+ }
442
+ }
443
+ function isValidHostname(value) {
444
+ return value.length > 0 && !/[\s/]/u.test(value);
445
+ }
446
+ function isValidRepositorySegment(value) {
447
+ if (value === "." || value === "..")
448
+ return false;
449
+ return /^[A-Za-z0-9_.-]+$/u.test(value);
450
+ }
451
+ function isRecord(value) {
452
+ return typeof value === "object" && value !== null;
453
+ }
454
+ function isErrno(value, code) {
455
+ return isRecord(value) && value.code === code;
456
+ }
457
+ function summarize(value) {
458
+ if (value === undefined)
459
+ return undefined;
460
+ const trimmed = value.trim();
461
+ return trimmed.length > 2000 ? `${trimmed.slice(0, 2000)}…` : trimmed;
462
+ }
463
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/github/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export type GitHubAdapterErrorCategory = "environment" | "authentication" | "repository" | "transport" | "api" | "contract";
2
+ export type GitHubAdapterErrorCode = "GH_NOT_INSTALLED" | "GH_UNAUTHENTICATED" | "REPOSITORY_RESOLUTION_FAILED" | "INVALID_REPOSITORY_OVERRIDE" | "GITHUB_TRANSPORT_FAILED" | "GITHUB_API_FAILED" | "GITHUB_API_RESPONSE_INVALID" | "CONTRACT_VIOLATION";
3
+ export interface GitHubAdapterErrorDetails {
4
+ readonly operation?: string;
5
+ readonly path?: string;
6
+ readonly executable?: string;
7
+ readonly hostname?: string;
8
+ readonly exitCode?: number;
9
+ readonly stderr?: string;
10
+ readonly response?: string;
11
+ readonly [key: string]: string | number | undefined;
12
+ }
13
+ export declare class GitHubAdapterError extends Error {
14
+ readonly category: GitHubAdapterErrorCategory;
15
+ readonly code: GitHubAdapterErrorCode;
16
+ readonly details: Readonly<GitHubAdapterErrorDetails>;
17
+ constructor(category: GitHubAdapterErrorCategory, code: GitHubAdapterErrorCode, message: string, details?: GitHubAdapterErrorDetails, options?: ErrorOptions);
18
+ }
19
+ export declare class GhNotInstalledError extends GitHubAdapterError {
20
+ constructor(executable?: string, cause?: unknown);
21
+ }
22
+ export declare class GhUnauthenticatedError extends GitHubAdapterError {
23
+ constructor(hostname: string | undefined, stderr?: string, cause?: unknown);
24
+ }
25
+ export declare class RepositoryResolutionError extends GitHubAdapterError {
26
+ constructor(message: string, details?: GitHubAdapterErrorDetails, cause?: unknown);
27
+ }
28
+ export declare class InvalidRepositoryOverrideError extends GitHubAdapterError {
29
+ constructor(repository: string, cause?: unknown);
30
+ }
31
+ export declare class GitHubTransportError extends GitHubAdapterError {
32
+ constructor(operation: string, message: string, details?: GitHubAdapterErrorDetails, cause?: unknown);
33
+ }
34
+ export declare class GitHubApiError extends GitHubAdapterError {
35
+ constructor(operation: string, message: string, details?: GitHubAdapterErrorDetails, cause?: unknown);
36
+ }
37
+ export declare class GitHubApiResponseError extends GitHubAdapterError {
38
+ constructor(operation: string, message: string, details?: GitHubAdapterErrorDetails, cause?: unknown);
39
+ }
40
+ export declare class ContractViolationError extends GitHubAdapterError {
41
+ constructor(message: string, path?: string, cause?: unknown);
42
+ }
43
+ export declare function isGitHubAdapterError(error: unknown): error is GitHubAdapterError;
@@ -0,0 +1,65 @@
1
+ export class GitHubAdapterError extends Error {
2
+ category;
3
+ code;
4
+ details;
5
+ constructor(category, code, message, details = {}, options) {
6
+ super(message, options);
7
+ this.name = "GitHubAdapterError";
8
+ this.category = category;
9
+ this.code = code;
10
+ this.details = details;
11
+ }
12
+ }
13
+ export class GhNotInstalledError extends GitHubAdapterError {
14
+ constructor(executable = "gh", cause) {
15
+ super("environment", "GH_NOT_INSTALLED", `The GitHub CLI executable "${executable}" is not available. Install gh and try again.`, { executable }, { cause });
16
+ this.name = "GhNotInstalledError";
17
+ }
18
+ }
19
+ export class GhUnauthenticatedError extends GitHubAdapterError {
20
+ constructor(hostname, stderr, cause) {
21
+ const hostMessage = hostname === undefined ? "GitHub" : `GitHub host ${hostname}`;
22
+ super("authentication", "GH_UNAUTHENTICATED", `${hostMessage} is not authenticated through gh. Run gh auth login and try again.`, { hostname, stderr }, { cause });
23
+ this.name = "GhUnauthenticatedError";
24
+ }
25
+ }
26
+ export class RepositoryResolutionError extends GitHubAdapterError {
27
+ constructor(message, details = {}, cause) {
28
+ super("repository", "REPOSITORY_RESOLUTION_FAILED", message, details, { cause });
29
+ this.name = "RepositoryResolutionError";
30
+ }
31
+ }
32
+ export class InvalidRepositoryOverrideError extends GitHubAdapterError {
33
+ constructor(repository, cause) {
34
+ super("repository", "INVALID_REPOSITORY_OVERRIDE", `Repository override "${repository}" must be owner/name, host/owner/name, or a GitHub repository URL.`, { path: "repository" }, { cause });
35
+ this.name = "InvalidRepositoryOverrideError";
36
+ }
37
+ }
38
+ export class GitHubTransportError extends GitHubAdapterError {
39
+ constructor(operation, message, details = {}, cause) {
40
+ super("transport", "GITHUB_TRANSPORT_FAILED", message, { operation, ...details }, { cause });
41
+ this.name = "GitHubTransportError";
42
+ }
43
+ }
44
+ export class GitHubApiError extends GitHubAdapterError {
45
+ constructor(operation, message, details = {}, cause) {
46
+ super("api", "GITHUB_API_FAILED", message, { operation, ...details }, { cause });
47
+ this.name = "GitHubApiError";
48
+ }
49
+ }
50
+ export class GitHubApiResponseError extends GitHubAdapterError {
51
+ constructor(operation, message, details = {}, cause) {
52
+ super("api", "GITHUB_API_RESPONSE_INVALID", message, { operation, ...details }, { cause });
53
+ this.name = "GitHubApiResponseError";
54
+ }
55
+ }
56
+ export class ContractViolationError extends GitHubAdapterError {
57
+ constructor(message, path, cause) {
58
+ super("contract", "CONTRACT_VIOLATION", message, { path }, { cause });
59
+ this.name = "ContractViolationError";
60
+ }
61
+ }
62
+ export function isGitHubAdapterError(error) {
63
+ return error instanceof GitHubAdapterError;
64
+ }
65
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/github/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./adapter.js";
2
+ export * from "./errors.js";
3
+ export * from "./transport.js";
4
+ export * from "./types.js";
@@ -0,0 +1,5 @@
1
+ export * from "./adapter.js";
2
+ export * from "./errors.js";
3
+ export * from "./transport.js";
4
+ export * from "./types.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface GhCommandResult {
2
+ readonly exitCode: number;
3
+ readonly stdout: string;
4
+ readonly stderr: string;
5
+ readonly signal?: NodeJS.Signals;
6
+ }
7
+ export interface GhTransportOptions {
8
+ readonly cwd?: string;
9
+ readonly timeoutMs?: number;
10
+ }
11
+ /** The adapter's only credential boundary: execute the user's existing gh CLI. */
12
+ export interface GhTransport {
13
+ run(args: readonly string[], options?: GhTransportOptions): Promise<GhCommandResult>;
14
+ }
15
+ export declare class ProcessGhTransport implements GhTransport {
16
+ readonly executable: string;
17
+ constructor(executable?: string);
18
+ run(args: readonly string[], options?: GhTransportOptions): Promise<GhCommandResult>;
19
+ }