@thanhvn14/csvibe 0.1.0 → 0.1.2

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 (176) hide show
  1. package/.csvibe/state/approaches.json +1 -0
  2. package/README.md +142 -3
  3. package/dist/commands/brainstorm.d.ts +16 -0
  4. package/dist/commands/brainstorm.d.ts.map +1 -0
  5. package/dist/commands/brainstorm.js +186 -0
  6. package/dist/commands/brainstorm.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +9 -0
  8. package/dist/commands/doctor.d.ts.map +1 -0
  9. package/dist/commands/doctor.js +72 -0
  10. package/dist/commands/doctor.js.map +1 -0
  11. package/dist/commands/help.d.ts.map +1 -1
  12. package/dist/commands/help.js +13 -7
  13. package/dist/commands/help.js.map +1 -1
  14. package/dist/commands/index.d.ts +3 -0
  15. package/dist/commands/index.d.ts.map +1 -1
  16. package/dist/commands/index.js +7 -1
  17. package/dist/commands/index.js.map +1 -1
  18. package/dist/commands/init/index.d.ts +7 -0
  19. package/dist/commands/init/index.d.ts.map +1 -0
  20. package/dist/commands/init/index.js +10 -0
  21. package/dist/commands/init/index.js.map +1 -0
  22. package/dist/commands/init/init-command.d.ts +10 -0
  23. package/dist/commands/init/init-command.d.ts.map +1 -0
  24. package/dist/commands/init/init-command.js +75 -0
  25. package/dist/commands/init/init-command.js.map +1 -0
  26. package/dist/commands/init/phases/config-handler.d.ts +10 -0
  27. package/dist/commands/init/phases/config-handler.d.ts.map +1 -0
  28. package/dist/commands/init/phases/config-handler.js +21 -0
  29. package/dist/commands/init/phases/config-handler.js.map +1 -0
  30. package/dist/commands/init/phases/detection-handler.d.ts +10 -0
  31. package/dist/commands/init/phases/detection-handler.d.ts.map +1 -0
  32. package/dist/commands/init/phases/detection-handler.js +80 -0
  33. package/dist/commands/init/phases/detection-handler.js.map +1 -0
  34. package/dist/commands/init/phases/download-handler.d.ts +9 -0
  35. package/dist/commands/init/phases/download-handler.d.ts.map +1 -0
  36. package/dist/commands/init/phases/download-handler.js +16 -0
  37. package/dist/commands/init/phases/download-handler.js.map +1 -0
  38. package/dist/commands/init/phases/prompt-handler.d.ts +10 -0
  39. package/dist/commands/init/phases/prompt-handler.d.ts.map +1 -0
  40. package/dist/commands/init/phases/prompt-handler.js +24 -0
  41. package/dist/commands/init/phases/prompt-handler.js.map +1 -0
  42. package/dist/commands/init/phases/scaffold-handler.d.ts +9 -0
  43. package/dist/commands/init/phases/scaffold-handler.d.ts.map +1 -0
  44. package/dist/commands/init/phases/scaffold-handler.js +18 -0
  45. package/dist/commands/init/phases/scaffold-handler.js.map +1 -0
  46. package/dist/commands/init/phases/validation-handler.d.ts +14 -0
  47. package/dist/commands/init/phases/validation-handler.d.ts.map +1 -0
  48. package/dist/commands/init/phases/validation-handler.js +50 -0
  49. package/dist/commands/init/phases/validation-handler.js.map +1 -0
  50. package/dist/commands/init/phases/vscode-handler.d.ts +9 -0
  51. package/dist/commands/init/phases/vscode-handler.d.ts.map +1 -0
  52. package/dist/commands/init/phases/vscode-handler.js +16 -0
  53. package/dist/commands/init/phases/vscode-handler.js.map +1 -0
  54. package/dist/commands/init/types.d.ts +28 -0
  55. package/dist/commands/init/types.d.ts.map +1 -0
  56. package/dist/commands/init/types.js +6 -0
  57. package/dist/commands/init/types.js.map +1 -0
  58. package/dist/commands/scout.d.ts +30 -0
  59. package/dist/commands/scout.d.ts.map +1 -0
  60. package/dist/commands/scout.js +116 -0
  61. package/dist/commands/scout.js.map +1 -0
  62. package/dist/config/constants.d.ts +3 -3
  63. package/dist/config/constants.js +3 -3
  64. package/dist/config/constants.js.map +1 -1
  65. package/dist/domains/config/generator.d.ts +17 -0
  66. package/dist/domains/config/generator.d.ts.map +1 -0
  67. package/dist/domains/config/generator.js +67 -0
  68. package/dist/domains/config/generator.js.map +1 -0
  69. package/dist/domains/config/index.d.ts +8 -0
  70. package/dist/domains/config/index.d.ts.map +1 -0
  71. package/dist/domains/config/index.js +15 -0
  72. package/dist/domains/config/index.js.map +1 -0
  73. package/dist/domains/config/types.d.ts +39 -0
  74. package/dist/domains/config/types.d.ts.map +1 -0
  75. package/dist/domains/config/types.js +6 -0
  76. package/dist/domains/config/types.js.map +1 -0
  77. package/dist/domains/config/validator.d.ts +17 -0
  78. package/dist/domains/config/validator.d.ts.map +1 -0
  79. package/dist/domains/config/validator.js +54 -0
  80. package/dist/domains/config/validator.js.map +1 -0
  81. package/dist/domains/github/auth-api.d.ts +19 -0
  82. package/dist/domains/github/auth-api.d.ts.map +1 -0
  83. package/dist/domains/github/auth-api.js +196 -0
  84. package/dist/domains/github/auth-api.js.map +1 -0
  85. package/dist/domains/github/github-client.d.ts +323 -0
  86. package/dist/domains/github/github-client.d.ts.map +1 -0
  87. package/dist/domains/github/github-client.js +192 -0
  88. package/dist/domains/github/github-client.js.map +1 -0
  89. package/dist/domains/github/index.d.ts +9 -0
  90. package/dist/domains/github/index.d.ts.map +1 -0
  91. package/dist/domains/github/index.js +23 -0
  92. package/dist/domains/github/index.js.map +1 -0
  93. package/dist/domains/github/keychain.d.ts +19 -0
  94. package/dist/domains/github/keychain.d.ts.map +1 -0
  95. package/dist/domains/github/keychain.js +132 -0
  96. package/dist/domains/github/keychain.js.map +1 -0
  97. package/dist/domains/github/types.d.ts +40 -0
  98. package/dist/domains/github/types.d.ts.map +1 -0
  99. package/dist/domains/github/types.js +6 -0
  100. package/dist/domains/github/types.js.map +1 -0
  101. package/dist/domains/health-checks/auto-healer.d.ts +14 -0
  102. package/dist/domains/health-checks/auto-healer.d.ts.map +1 -0
  103. package/dist/domains/health-checks/auto-healer.js +160 -0
  104. package/dist/domains/health-checks/auto-healer.js.map +1 -0
  105. package/dist/domains/health-checks/check-runner.d.ts +10 -0
  106. package/dist/domains/health-checks/check-runner.d.ts.map +1 -0
  107. package/dist/domains/health-checks/check-runner.js +31 -0
  108. package/dist/domains/health-checks/check-runner.js.map +1 -0
  109. package/dist/domains/health-checks/checkers/auth-checker.d.ts +10 -0
  110. package/dist/domains/health-checks/checkers/auth-checker.d.ts.map +1 -0
  111. package/dist/domains/health-checks/checkers/auth-checker.js +90 -0
  112. package/dist/domains/health-checks/checkers/auth-checker.js.map +1 -0
  113. package/dist/domains/health-checks/checkers/deps-checker.d.ts +10 -0
  114. package/dist/domains/health-checks/checkers/deps-checker.d.ts.map +1 -0
  115. package/dist/domains/health-checks/checkers/deps-checker.js +150 -0
  116. package/dist/domains/health-checks/checkers/deps-checker.js.map +1 -0
  117. package/dist/domains/health-checks/checkers/project-checker.d.ts +10 -0
  118. package/dist/domains/health-checks/checkers/project-checker.d.ts.map +1 -0
  119. package/dist/domains/health-checks/checkers/project-checker.js +124 -0
  120. package/dist/domains/health-checks/checkers/project-checker.js.map +1 -0
  121. package/dist/domains/health-checks/checkers/system-checker.d.ts +10 -0
  122. package/dist/domains/health-checks/checkers/system-checker.d.ts.map +1 -0
  123. package/dist/domains/health-checks/checkers/system-checker.js +135 -0
  124. package/dist/domains/health-checks/checkers/system-checker.js.map +1 -0
  125. package/dist/domains/health-checks/index.d.ts +9 -0
  126. package/dist/domains/health-checks/index.d.ts.map +1 -0
  127. package/dist/domains/health-checks/index.js +21 -0
  128. package/dist/domains/health-checks/index.js.map +1 -0
  129. package/dist/domains/health-checks/report-generator.d.ts +18 -0
  130. package/dist/domains/health-checks/report-generator.d.ts.map +1 -0
  131. package/dist/domains/health-checks/report-generator.js +117 -0
  132. package/dist/domains/health-checks/report-generator.js.map +1 -0
  133. package/dist/domains/health-checks/types.d.ts +35 -0
  134. package/dist/domains/health-checks/types.d.ts.map +1 -0
  135. package/dist/domains/health-checks/types.js +6 -0
  136. package/dist/domains/health-checks/types.js.map +1 -0
  137. package/dist/index.js +33 -0
  138. package/dist/index.js.map +1 -1
  139. package/dist/utils/approaches-validator.d.ts +40 -0
  140. package/dist/utils/approaches-validator.d.ts.map +1 -0
  141. package/dist/utils/approaches-validator.js +101 -0
  142. package/dist/utils/approaches-validator.js.map +1 -0
  143. package/dist/utils/dependency-analyzer.d.ts +31 -0
  144. package/dist/utils/dependency-analyzer.d.ts.map +1 -0
  145. package/dist/utils/dependency-analyzer.js +294 -0
  146. package/dist/utils/dependency-analyzer.js.map +1 -0
  147. package/dist/utils/directory-analyzer.d.ts +23 -0
  148. package/dist/utils/directory-analyzer.d.ts.map +1 -0
  149. package/dist/utils/directory-analyzer.js +81 -0
  150. package/dist/utils/directory-analyzer.js.map +1 -0
  151. package/dist/utils/downloader.d.ts +3 -3
  152. package/dist/utils/downloader.d.ts.map +1 -1
  153. package/dist/utils/downloader.js +35 -65
  154. package/dist/utils/downloader.js.map +1 -1
  155. package/dist/utils/errors.d.ts +64 -10
  156. package/dist/utils/errors.d.ts.map +1 -1
  157. package/dist/utils/errors.js +136 -22
  158. package/dist/utils/errors.js.map +1 -1
  159. package/dist/utils/gh-cli.d.ts +4 -2
  160. package/dist/utils/gh-cli.d.ts.map +1 -1
  161. package/dist/utils/gh-cli.js +33 -38
  162. package/dist/utils/gh-cli.js.map +1 -1
  163. package/dist/utils/progress.d.ts +37 -0
  164. package/dist/utils/progress.d.ts.map +1 -0
  165. package/dist/utils/progress.js +121 -0
  166. package/dist/utils/progress.js.map +1 -0
  167. package/dist/utils/prompts.d.ts +5 -1
  168. package/dist/utils/prompts.d.ts.map +1 -1
  169. package/dist/utils/prompts.js +124 -64
  170. package/dist/utils/prompts.js.map +1 -1
  171. package/package.json +7 -3
  172. package/test-jira-prompt.js +32 -0
  173. package/dist/commands/init.d.ts +0 -6
  174. package/dist/commands/init.d.ts.map +0 -1
  175. package/dist/commands/init.js +0 -147
  176. package/dist/commands/init.js.map +0 -1
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ /**
3
+ * Multi-tier GitHub authentication system
4
+ * Implements 5-tier fallback: gh CLI → env → config → keychain → prompt
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.getGitHubToken = getGitHubToken;
44
+ exports.validateToken = validateToken;
45
+ exports.getAuthMethodDescription = getAuthMethodDescription;
46
+ const child_process_1 = require("child_process");
47
+ const fs_extra_1 = __importDefault(require("fs-extra"));
48
+ const path_1 = __importDefault(require("path"));
49
+ const yaml_1 = __importDefault(require("yaml"));
50
+ const p = __importStar(require("@clack/prompts"));
51
+ const chalk_1 = __importDefault(require("chalk"));
52
+ const errors_1 = require("../../utils/errors");
53
+ const keychain_1 = require("./keychain");
54
+ /**
55
+ * Get GitHub token using 5-tier fallback strategy
56
+ * @throws {GitHubAuthError} if no authentication method available
57
+ */
58
+ async function getGitHubToken() {
59
+ // Tier 1: GitHub CLI
60
+ const ghCliToken = tryGitHubCLI();
61
+ if (ghCliToken) {
62
+ return { token: ghCliToken, method: 'gh-cli' };
63
+ }
64
+ // Tier 2: Environment Variables
65
+ const envToken = tryEnvironmentVariable();
66
+ if (envToken) {
67
+ return { token: envToken, method: 'env-var' };
68
+ }
69
+ // Tier 3: Config File
70
+ const configToken = await tryConfigFile();
71
+ if (configToken) {
72
+ return { token: configToken, method: 'config' };
73
+ }
74
+ // Tier 4: OS Keychain
75
+ const keychainToken = await tryKeychain();
76
+ if (keychainToken) {
77
+ return { token: keychainToken, method: 'keychain' };
78
+ }
79
+ // Tier 5: User Prompt
80
+ const promptedToken = await promptForToken();
81
+ if (promptedToken) {
82
+ // Save to keychain for future use
83
+ await (0, keychain_1.saveTokenToKeychain)(promptedToken);
84
+ return { token: promptedToken, method: 'prompt' };
85
+ }
86
+ throw new errors_1.GitHubAuthError('No GitHub authentication method available');
87
+ }
88
+ /**
89
+ * Tier 1: Try GitHub CLI authentication
90
+ */
91
+ function tryGitHubCLI() {
92
+ try {
93
+ const token = (0, child_process_1.execSync)('gh auth token', {
94
+ encoding: 'utf-8',
95
+ stdio: ['pipe', 'pipe', 'ignore'],
96
+ }).trim();
97
+ if (token && token.length > 0 && !token.includes('not logged in')) {
98
+ return token;
99
+ }
100
+ }
101
+ catch (error) {
102
+ // gh CLI not available or not authenticated
103
+ }
104
+ return null;
105
+ }
106
+ /**
107
+ * Tier 2: Try environment variables
108
+ */
109
+ function tryEnvironmentVariable() {
110
+ const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;
111
+ return token && token.length > 0 ? token : null;
112
+ }
113
+ /**
114
+ * Tier 3: Try config file
115
+ */
116
+ async function tryConfigFile() {
117
+ try {
118
+ const configPath = path_1.default.join(process.cwd(), '.csvibe', 'config.yml');
119
+ if (!(await fs_extra_1.default.pathExists(configPath))) {
120
+ return null;
121
+ }
122
+ const configContent = await fs_extra_1.default.readFile(configPath, 'utf-8');
123
+ const config = yaml_1.default.parse(configContent);
124
+ const token = config?.github?.token || config?.github?.access_token;
125
+ return token && token.length > 0 ? token : null;
126
+ }
127
+ catch (error) {
128
+ return null;
129
+ }
130
+ }
131
+ /**
132
+ * Tier 4: Try OS keychain
133
+ */
134
+ async function tryKeychain() {
135
+ return await (0, keychain_1.readTokenFromKeychain)();
136
+ }
137
+ /**
138
+ * Tier 5: Prompt user for token
139
+ */
140
+ async function promptForToken() {
141
+ p.intro(chalk_1.default.bold.cyan('GitHub Authentication Required'));
142
+ p.note(chalk_1.default.gray('To create a GitHub Personal Access Token:\n' +
143
+ '1. Go to: ' +
144
+ chalk_1.default.cyan('https://github.com/settings/tokens/new') +
145
+ '\n' +
146
+ '2. Select scopes: ' +
147
+ chalk_1.default.yellow('repo, read:org') +
148
+ '\n' +
149
+ '3. Generate and copy the token'), chalk_1.default.bold('📝 Setup Instructions'));
150
+ const token = await p.password({
151
+ message: 'GitHub Personal Access Token',
152
+ validate: (value) => {
153
+ if (!value)
154
+ return 'Token is required';
155
+ if (value.length < 20) {
156
+ return 'Token seems too short. Please enter a valid GitHub token.';
157
+ }
158
+ },
159
+ });
160
+ if (p.isCancel(token)) {
161
+ return null;
162
+ }
163
+ return token;
164
+ }
165
+ /**
166
+ * Validate GitHub token by making a test API call
167
+ */
168
+ async function validateToken(token) {
169
+ try {
170
+ const response = await fetch('https://api.github.com/user', {
171
+ headers: {
172
+ Authorization: `Bearer ${token}`,
173
+ Accept: 'application/vnd.github+json',
174
+ 'X-GitHub-Api-Version': '2022-11-28',
175
+ },
176
+ });
177
+ return response.ok;
178
+ }
179
+ catch (error) {
180
+ return false;
181
+ }
182
+ }
183
+ /**
184
+ * Get authentication method description for logging
185
+ */
186
+ function getAuthMethodDescription(method) {
187
+ const descriptions = {
188
+ 'gh-cli': 'GitHub CLI (gh auth token)',
189
+ 'env-var': 'Environment variable (GITHUB_TOKEN/GH_TOKEN)',
190
+ config: 'Config file (.csvibe/config.yml)',
191
+ keychain: 'OS Keychain (secure storage)',
192
+ prompt: 'User prompt (saved to keychain)',
193
+ };
194
+ return descriptions[method] || 'Unknown';
195
+ }
196
+ //# sourceMappingURL=auth-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-api.js","sourceRoot":"","sources":["../../../src/domains/github/auth-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,323 @@
1
+ /**
2
+ * GitHub client with @octokit/rest integration
3
+ * Includes retry logic, rate limit handling, and progress tracking
4
+ */
5
+ import type { RateLimitInfo } from './types';
6
+ /**
7
+ * GitHub client wrapper with resilience patterns
8
+ */
9
+ export declare class GitHubClient {
10
+ private octokit;
11
+ private token;
12
+ private constructor();
13
+ /**
14
+ * Create authenticated GitHub client
15
+ */
16
+ static create(): Promise<GitHubClient>;
17
+ /**
18
+ * Get current rate limit information
19
+ */
20
+ getRateLimit(): Promise<RateLimitInfo>;
21
+ /**
22
+ * Download file content from repository
23
+ */
24
+ downloadFile(owner: string, repo: string, path: string, ref?: string): Promise<Buffer>;
25
+ /**
26
+ * Download directory contents recursively
27
+ */
28
+ downloadDirectory(owner: string, repo: string, path: string, ref?: string): Promise<Array<{
29
+ path: string;
30
+ content: Buffer;
31
+ }>>;
32
+ /**
33
+ * Get repository information
34
+ */
35
+ getRepository(owner: string, repo: string): Promise<{
36
+ id: number;
37
+ node_id: string;
38
+ name: string;
39
+ full_name: string;
40
+ owner: import("@octokit/openapi-types").components["schemas"]["simple-user"];
41
+ private: boolean;
42
+ html_url: string;
43
+ description: string | null;
44
+ fork: boolean;
45
+ url: string;
46
+ archive_url: string;
47
+ assignees_url: string;
48
+ blobs_url: string;
49
+ branches_url: string;
50
+ collaborators_url: string;
51
+ comments_url: string;
52
+ commits_url: string;
53
+ compare_url: string;
54
+ contents_url: string;
55
+ contributors_url: string;
56
+ deployments_url: string;
57
+ downloads_url: string;
58
+ events_url: string;
59
+ forks_url: string;
60
+ git_commits_url: string;
61
+ git_refs_url: string;
62
+ git_tags_url: string;
63
+ git_url: string;
64
+ issue_comment_url: string;
65
+ issue_events_url: string;
66
+ issues_url: string;
67
+ keys_url: string;
68
+ labels_url: string;
69
+ languages_url: string;
70
+ merges_url: string;
71
+ milestones_url: string;
72
+ notifications_url: string;
73
+ pulls_url: string;
74
+ releases_url: string;
75
+ ssh_url: string;
76
+ stargazers_url: string;
77
+ statuses_url: string;
78
+ subscribers_url: string;
79
+ subscription_url: string;
80
+ tags_url: string;
81
+ teams_url: string;
82
+ trees_url: string;
83
+ clone_url: string;
84
+ mirror_url: string | null;
85
+ hooks_url: string;
86
+ svn_url: string;
87
+ homepage: string | null;
88
+ language: string | null;
89
+ forks_count: number;
90
+ stargazers_count: number;
91
+ watchers_count: number;
92
+ size: number;
93
+ default_branch: string;
94
+ open_issues_count: number;
95
+ is_template?: boolean;
96
+ topics?: string[];
97
+ has_issues: boolean;
98
+ has_projects: boolean;
99
+ has_wiki: boolean;
100
+ has_pages: boolean;
101
+ has_downloads?: boolean;
102
+ has_discussions: boolean;
103
+ archived: boolean;
104
+ disabled: boolean;
105
+ visibility?: string;
106
+ pushed_at: string;
107
+ created_at: string;
108
+ updated_at: string;
109
+ permissions?: {
110
+ admin: boolean;
111
+ maintain?: boolean;
112
+ push: boolean;
113
+ triage?: boolean;
114
+ pull: boolean;
115
+ };
116
+ allow_rebase_merge?: boolean;
117
+ template_repository?: import("@octokit/openapi-types").components["schemas"]["nullable-repository"];
118
+ temp_clone_token?: string | null;
119
+ allow_squash_merge?: boolean;
120
+ allow_auto_merge?: boolean;
121
+ delete_branch_on_merge?: boolean;
122
+ allow_merge_commit?: boolean;
123
+ allow_update_branch?: boolean;
124
+ use_squash_pr_title_as_default?: boolean;
125
+ squash_merge_commit_title?: "PR_TITLE" | "COMMIT_OR_PR_TITLE";
126
+ squash_merge_commit_message?: "PR_BODY" | "COMMIT_MESSAGES" | "BLANK";
127
+ merge_commit_title?: "PR_TITLE" | "MERGE_MESSAGE";
128
+ merge_commit_message?: "PR_BODY" | "PR_TITLE" | "BLANK";
129
+ allow_forking?: boolean;
130
+ web_commit_signoff_required?: boolean;
131
+ subscribers_count: number;
132
+ network_count: number;
133
+ license: import("@octokit/openapi-types").components["schemas"]["nullable-license-simple"];
134
+ organization?: import("@octokit/openapi-types").components["schemas"]["nullable-simple-user"];
135
+ parent?: import("@octokit/openapi-types").components["schemas"]["repository"];
136
+ source?: import("@octokit/openapi-types").components["schemas"]["repository"];
137
+ forks: number;
138
+ master_branch?: string;
139
+ open_issues: number;
140
+ watchers: number;
141
+ anonymous_access_enabled?: boolean;
142
+ code_of_conduct?: import("@octokit/openapi-types").components["schemas"]["code-of-conduct-simple"];
143
+ security_and_analysis?: import("@octokit/openapi-types").components["schemas"]["security-and-analysis"];
144
+ custom_properties?: {
145
+ [key: string]: unknown;
146
+ };
147
+ }>;
148
+ /**
149
+ * List repository contents at path
150
+ */
151
+ listContents(owner: string, repo: string, path?: string, ref?: string): Promise<{
152
+ type: "dir" | "file" | "submodule" | "symlink";
153
+ size: number;
154
+ name: string;
155
+ path: string;
156
+ content?: string;
157
+ sha: string;
158
+ url: string;
159
+ git_url: string | null;
160
+ html_url: string | null;
161
+ download_url: string | null;
162
+ _links: {
163
+ git: string | null;
164
+ html: string | null;
165
+ self: string;
166
+ };
167
+ }[] | ({
168
+ type: "file";
169
+ encoding: string;
170
+ size: number;
171
+ name: string;
172
+ path: string;
173
+ content: string;
174
+ sha: string;
175
+ url: string;
176
+ git_url: string | null;
177
+ html_url: string | null;
178
+ download_url: string | null;
179
+ _links: {
180
+ git: string | null;
181
+ html: string | null;
182
+ self: string;
183
+ };
184
+ target?: string;
185
+ submodule_git_url?: string;
186
+ } | {
187
+ type: "symlink";
188
+ target: string;
189
+ size: number;
190
+ name: string;
191
+ path: string;
192
+ sha: string;
193
+ url: string;
194
+ git_url: string | null;
195
+ html_url: string | null;
196
+ download_url: string | null;
197
+ _links: {
198
+ git: string | null;
199
+ html: string | null;
200
+ self: string;
201
+ };
202
+ } | {
203
+ type: "submodule";
204
+ submodule_git_url: string;
205
+ size: number;
206
+ name: string;
207
+ path: string;
208
+ sha: string;
209
+ url: string;
210
+ git_url: string | null;
211
+ html_url: string | null;
212
+ download_url: string | null;
213
+ _links: {
214
+ git: string | null;
215
+ html: string | null;
216
+ self: string;
217
+ };
218
+ })[]>;
219
+ /**
220
+ * Check if authenticated user has access to repository
221
+ */
222
+ hasRepoAccess(owner: string, repo: string): Promise<boolean>;
223
+ /**
224
+ * Get authenticated user information
225
+ */
226
+ getAuthenticatedUser(): Promise<{
227
+ login: string;
228
+ id: number;
229
+ user_view_type?: string;
230
+ node_id: string;
231
+ avatar_url: string;
232
+ gravatar_id: string | null;
233
+ url: string;
234
+ html_url: string;
235
+ followers_url: string;
236
+ following_url: string;
237
+ gists_url: string;
238
+ starred_url: string;
239
+ subscriptions_url: string;
240
+ organizations_url: string;
241
+ repos_url: string;
242
+ events_url: string;
243
+ received_events_url: string;
244
+ type: string;
245
+ site_admin: boolean;
246
+ name: string | null;
247
+ company: string | null;
248
+ blog: string | null;
249
+ location: string | null;
250
+ email: string | null;
251
+ notification_email?: string | null;
252
+ hireable: boolean | null;
253
+ bio: string | null;
254
+ twitter_username?: string | null;
255
+ public_repos: number;
256
+ public_gists: number;
257
+ followers: number;
258
+ following: number;
259
+ created_at: string;
260
+ updated_at: string;
261
+ private_gists: number;
262
+ total_private_repos: number;
263
+ owned_private_repos: number;
264
+ disk_usage: number;
265
+ collaborators: number;
266
+ two_factor_authentication: boolean;
267
+ plan?: {
268
+ collaborators: number;
269
+ name: string;
270
+ space: number;
271
+ private_repos: number;
272
+ };
273
+ business_plus?: boolean;
274
+ ldap_dn?: string;
275
+ } | {
276
+ login: string;
277
+ id: number;
278
+ user_view_type?: string;
279
+ node_id: string;
280
+ avatar_url: string;
281
+ gravatar_id: string | null;
282
+ url: string;
283
+ html_url: string;
284
+ followers_url: string;
285
+ following_url: string;
286
+ gists_url: string;
287
+ starred_url: string;
288
+ subscriptions_url: string;
289
+ organizations_url: string;
290
+ repos_url: string;
291
+ events_url: string;
292
+ received_events_url: string;
293
+ type: string;
294
+ site_admin: boolean;
295
+ name: string | null;
296
+ company: string | null;
297
+ blog: string | null;
298
+ location: string | null;
299
+ email: string | null;
300
+ notification_email?: string | null;
301
+ hireable: boolean | null;
302
+ bio: string | null;
303
+ twitter_username?: string | null;
304
+ public_repos: number;
305
+ public_gists: number;
306
+ followers: number;
307
+ following: number;
308
+ created_at: string;
309
+ updated_at: string;
310
+ plan?: {
311
+ collaborators: number;
312
+ name: string;
313
+ space: number;
314
+ private_repos: number;
315
+ };
316
+ private_gists?: number;
317
+ total_private_repos?: number;
318
+ owned_private_repos?: number;
319
+ disk_usage?: number;
320
+ collaborators?: number;
321
+ }>;
322
+ }
323
+ //# sourceMappingURL=github-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-client.d.ts","sourceRoot":"","sources":["../../../src/domains/github/github-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAE9D;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO;IAWP;;OAEG;WACU,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAK5C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;IAoB5C;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAe,GACnB,OAAO,CAAC,MAAM,CAAC;IAwClB;;OAEG;IACG,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAe,GACnB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA+CpD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;eAgE6qk7B,sDAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAA2nO,CAAC;;kBAAgD,CAAC;;;;8BAAqI,sDAAsB;;;;;;;;;;;;;;;;iBAAsyE,sDAAsB;uBAAiD,sDAAsB;iBAAwC,sDAAsB;iBAA8B,sDAAsB;;;;;;0BAAiS,sDAAsB;gCAAyD,sDAAsB;;;;;IAjDr747B;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,EAAE,GAAG,GAAE,MAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuBvF;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlE;;OAEG;IACG,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI3B"}