@paysdoc/devplatform 1.0.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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +122 -0
  3. package/dist/git/bootstrapIdentity.d.ts +50 -0
  4. package/dist/git/bootstrapIdentity.d.ts.map +1 -0
  5. package/dist/git/bootstrapIdentity.js +72 -0
  6. package/dist/git/bootstrapIdentity.js.map +1 -0
  7. package/dist/git/branchOps.d.ts +27 -0
  8. package/dist/git/branchOps.d.ts.map +1 -0
  9. package/dist/git/branchOps.js +91 -0
  10. package/dist/git/branchOps.js.map +1 -0
  11. package/dist/git/claimOps.d.ts +40 -0
  12. package/dist/git/claimOps.d.ts.map +1 -0
  13. package/dist/git/claimOps.js +44 -0
  14. package/dist/git/claimOps.js.map +1 -0
  15. package/dist/git/commitOps.d.ts +35 -0
  16. package/dist/git/commitOps.d.ts.map +1 -0
  17. package/dist/git/commitOps.js +131 -0
  18. package/dist/git/commitOps.js.map +1 -0
  19. package/dist/git/consoleLogger.d.ts +8 -0
  20. package/dist/git/consoleLogger.d.ts.map +1 -0
  21. package/dist/git/consoleLogger.js +9 -0
  22. package/dist/git/consoleLogger.js.map +1 -0
  23. package/dist/git/gitContext.d.ts +150 -0
  24. package/dist/git/gitContext.d.ts.map +1 -0
  25. package/dist/git/gitContext.js +405 -0
  26. package/dist/git/gitContext.js.map +1 -0
  27. package/dist/git/gitReadOps.d.ts +33 -0
  28. package/dist/git/gitReadOps.d.ts.map +1 -0
  29. package/dist/git/gitReadOps.js +38 -0
  30. package/dist/git/gitReadOps.js.map +1 -0
  31. package/dist/git/index.d.ts +49 -0
  32. package/dist/git/index.d.ts.map +1 -0
  33. package/dist/git/index.js +44 -0
  34. package/dist/git/index.js.map +1 -0
  35. package/dist/git/processCleanup.d.ts +7 -0
  36. package/dist/git/processCleanup.d.ts.map +1 -0
  37. package/dist/git/processCleanup.js +45 -0
  38. package/dist/git/processCleanup.js.map +1 -0
  39. package/dist/git/remoteOps.d.ts +25 -0
  40. package/dist/git/remoteOps.d.ts.map +1 -0
  41. package/dist/git/remoteOps.js +30 -0
  42. package/dist/git/remoteOps.js.map +1 -0
  43. package/dist/git/repoWorkspace.d.ts +72 -0
  44. package/dist/git/repoWorkspace.d.ts.map +1 -0
  45. package/dist/git/repoWorkspace.js +85 -0
  46. package/dist/git/repoWorkspace.js.map +1 -0
  47. package/dist/git/types.d.ts +182 -0
  48. package/dist/git/types.d.ts.map +1 -0
  49. package/dist/git/types.js +10 -0
  50. package/dist/git/types.js.map +1 -0
  51. package/dist/git/workingDirectoryGuard.d.ts +39 -0
  52. package/dist/git/workingDirectoryGuard.d.ts.map +1 -0
  53. package/dist/git/workingDirectoryGuard.js +53 -0
  54. package/dist/git/workingDirectoryGuard.js.map +1 -0
  55. package/dist/git/worktreeCreateOps.d.ts +45 -0
  56. package/dist/git/worktreeCreateOps.d.ts.map +1 -0
  57. package/dist/git/worktreeCreateOps.js +208 -0
  58. package/dist/git/worktreeCreateOps.js.map +1 -0
  59. package/dist/git/worktreeProbeOps.d.ts +17 -0
  60. package/dist/git/worktreeProbeOps.d.ts.map +1 -0
  61. package/dist/git/worktreeProbeOps.js +66 -0
  62. package/dist/git/worktreeProbeOps.js.map +1 -0
  63. package/dist/git/worktreeQueryOps.d.ts +45 -0
  64. package/dist/git/worktreeQueryOps.d.ts.map +1 -0
  65. package/dist/git/worktreeQueryOps.js +129 -0
  66. package/dist/git/worktreeQueryOps.js.map +1 -0
  67. package/dist/git/worktreeRemoveOps.d.ts +27 -0
  68. package/dist/git/worktreeRemoveOps.d.ts.map +1 -0
  69. package/dist/git/worktreeRemoveOps.js +132 -0
  70. package/dist/git/worktreeRemoveOps.js.map +1 -0
  71. package/dist/git/worktreeResetOps.d.ts +18 -0
  72. package/dist/git/worktreeResetOps.d.ts.map +1 -0
  73. package/dist/git/worktreeResetOps.js +68 -0
  74. package/dist/git/worktreeResetOps.js.map +1 -0
  75. package/dist/index.d.ts +13 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +13 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/providers/forgeProviders.d.ts +72 -0
  80. package/dist/providers/forgeProviders.d.ts.map +1 -0
  81. package/dist/providers/forgeProviders.js +112 -0
  82. package/dist/providers/forgeProviders.js.map +1 -0
  83. package/dist/providers/github/appAuth.d.ts +70 -0
  84. package/dist/providers/github/appAuth.d.ts.map +1 -0
  85. package/dist/providers/github/appAuth.js +243 -0
  86. package/dist/providers/github/appAuth.js.map +1 -0
  87. package/dist/providers/github/cloneUrl.d.ts +12 -0
  88. package/dist/providers/github/cloneUrl.d.ts.map +1 -0
  89. package/dist/providers/github/cloneUrl.js +20 -0
  90. package/dist/providers/github/cloneUrl.js.map +1 -0
  91. package/dist/providers/github/commands/boardCommands.d.ts +22 -0
  92. package/dist/providers/github/commands/boardCommands.d.ts.map +1 -0
  93. package/dist/providers/github/commands/boardCommands.js +66 -0
  94. package/dist/providers/github/commands/boardCommands.js.map +1 -0
  95. package/dist/providers/github/commands/issueCommands.d.ts +21 -0
  96. package/dist/providers/github/commands/issueCommands.d.ts.map +1 -0
  97. package/dist/providers/github/commands/issueCommands.js +50 -0
  98. package/dist/providers/github/commands/issueCommands.js.map +1 -0
  99. package/dist/providers/github/commands/labelCommands.d.ts +3 -0
  100. package/dist/providers/github/commands/labelCommands.d.ts.map +1 -0
  101. package/dist/providers/github/commands/labelCommands.js +8 -0
  102. package/dist/providers/github/commands/labelCommands.js.map +1 -0
  103. package/dist/providers/github/commands/prCommands.d.ts +14 -0
  104. package/dist/providers/github/commands/prCommands.d.ts.map +1 -0
  105. package/dist/providers/github/commands/prCommands.js +46 -0
  106. package/dist/providers/github/commands/prCommands.js.map +1 -0
  107. package/dist/providers/github/commands/secretCommands.d.ts +2 -0
  108. package/dist/providers/github/commands/secretCommands.d.ts.map +1 -0
  109. package/dist/providers/github/commands/secretCommands.js +5 -0
  110. package/dist/providers/github/commands/secretCommands.js.map +1 -0
  111. package/dist/providers/github/contextBinding.d.ts +11 -0
  112. package/dist/providers/github/contextBinding.d.ts.map +1 -0
  113. package/dist/providers/github/contextBinding.js +15 -0
  114. package/dist/providers/github/contextBinding.js.map +1 -0
  115. package/dist/providers/github/domain/issue.d.ts +94 -0
  116. package/dist/providers/github/domain/issue.d.ts.map +1 -0
  117. package/dist/providers/github/domain/issue.js +7 -0
  118. package/dist/providers/github/domain/issue.js.map +1 -0
  119. package/dist/providers/github/domain/pullRequest.d.ts +55 -0
  120. package/dist/providers/github/domain/pullRequest.d.ts.map +1 -0
  121. package/dist/providers/github/domain/pullRequest.js +9 -0
  122. package/dist/providers/github/domain/pullRequest.js.map +1 -0
  123. package/dist/providers/github/ghAuthToken.d.ts +28 -0
  124. package/dist/providers/github/ghAuthToken.d.ts.map +1 -0
  125. package/dist/providers/github/ghAuthToken.js +39 -0
  126. package/dist/providers/github/ghAuthToken.js.map +1 -0
  127. package/dist/providers/github/ghCommandRunner.d.ts +20 -0
  128. package/dist/providers/github/ghCommandRunner.d.ts.map +1 -0
  129. package/dist/providers/github/ghCommandRunner.js +21 -0
  130. package/dist/providers/github/ghCommandRunner.js.map +1 -0
  131. package/dist/providers/github/ghIssueApi.d.ts +29 -0
  132. package/dist/providers/github/ghIssueApi.d.ts.map +1 -0
  133. package/dist/providers/github/ghIssueApi.js +37 -0
  134. package/dist/providers/github/ghIssueApi.js.map +1 -0
  135. package/dist/providers/github/ghIssueParsers.d.ts +28 -0
  136. package/dist/providers/github/ghIssueParsers.d.ts.map +1 -0
  137. package/dist/providers/github/ghIssueParsers.js +105 -0
  138. package/dist/providers/github/ghIssueParsers.js.map +1 -0
  139. package/dist/providers/github/ghPrApi.d.ts +27 -0
  140. package/dist/providers/github/ghPrApi.d.ts.map +1 -0
  141. package/dist/providers/github/ghPrApi.js +32 -0
  142. package/dist/providers/github/ghPrApi.js.map +1 -0
  143. package/dist/providers/github/ghPrParsers.d.ts +57 -0
  144. package/dist/providers/github/ghPrParsers.d.ts.map +1 -0
  145. package/dist/providers/github/ghPrParsers.js +135 -0
  146. package/dist/providers/github/ghPrParsers.js.map +1 -0
  147. package/dist/providers/github/ghRepoApi.d.ts +33 -0
  148. package/dist/providers/github/ghRepoApi.d.ts.map +1 -0
  149. package/dist/providers/github/ghRepoApi.js +89 -0
  150. package/dist/providers/github/ghRepoApi.js.map +1 -0
  151. package/dist/providers/github/githubBoardManager.d.ts +39 -0
  152. package/dist/providers/github/githubBoardManager.d.ts.map +1 -0
  153. package/dist/providers/github/githubBoardManager.js +166 -0
  154. package/dist/providers/github/githubBoardManager.js.map +1 -0
  155. package/dist/providers/github/githubCodeHost.d.ts +73 -0
  156. package/dist/providers/github/githubCodeHost.d.ts.map +1 -0
  157. package/dist/providers/github/githubCodeHost.js +217 -0
  158. package/dist/providers/github/githubCodeHost.js.map +1 -0
  159. package/dist/providers/github/githubIdentity.d.ts +51 -0
  160. package/dist/providers/github/githubIdentity.d.ts.map +1 -0
  161. package/dist/providers/github/githubIdentity.js +110 -0
  162. package/dist/providers/github/githubIdentity.js.map +1 -0
  163. package/dist/providers/github/githubIssueTracker.d.ts +69 -0
  164. package/dist/providers/github/githubIssueTracker.d.ts.map +1 -0
  165. package/dist/providers/github/githubIssueTracker.js +209 -0
  166. package/dist/providers/github/githubIssueTracker.js.map +1 -0
  167. package/dist/providers/github/githubTokenProvider.d.ts +41 -0
  168. package/dist/providers/github/githubTokenProvider.d.ts.map +1 -0
  169. package/dist/providers/github/githubTokenProvider.js +51 -0
  170. package/dist/providers/github/githubTokenProvider.js.map +1 -0
  171. package/dist/providers/github/index.d.ts +10 -0
  172. package/dist/providers/github/index.d.ts.map +1 -0
  173. package/dist/providers/github/index.js +5 -0
  174. package/dist/providers/github/index.js.map +1 -0
  175. package/dist/providers/github/mappers.d.ts +40 -0
  176. package/dist/providers/github/mappers.d.ts.map +1 -0
  177. package/dist/providers/github/mappers.js +103 -0
  178. package/dist/providers/github/mappers.js.map +1 -0
  179. package/dist/providers/github/tokenResolver.d.ts +37 -0
  180. package/dist/providers/github/tokenResolver.d.ts.map +1 -0
  181. package/dist/providers/github/tokenResolver.js +43 -0
  182. package/dist/providers/github/tokenResolver.js.map +1 -0
  183. package/dist/providers/gitlab/gitlabApiClient.d.ts +45 -0
  184. package/dist/providers/gitlab/gitlabApiClient.d.ts.map +1 -0
  185. package/dist/providers/gitlab/gitlabApiClient.js +95 -0
  186. package/dist/providers/gitlab/gitlabApiClient.js.map +1 -0
  187. package/dist/providers/gitlab/gitlabBoardManager.d.ts +11 -0
  188. package/dist/providers/gitlab/gitlabBoardManager.d.ts.map +1 -0
  189. package/dist/providers/gitlab/gitlabBoardManager.js +27 -0
  190. package/dist/providers/gitlab/gitlabBoardManager.js.map +1 -0
  191. package/dist/providers/gitlab/gitlabCodeHost.d.ts +49 -0
  192. package/dist/providers/gitlab/gitlabCodeHost.d.ts.map +1 -0
  193. package/dist/providers/gitlab/gitlabCodeHost.js +109 -0
  194. package/dist/providers/gitlab/gitlabCodeHost.js.map +1 -0
  195. package/dist/providers/gitlab/gitlabTypes.d.ts +46 -0
  196. package/dist/providers/gitlab/gitlabTypes.d.ts.map +1 -0
  197. package/dist/providers/gitlab/gitlabTypes.js +6 -0
  198. package/dist/providers/gitlab/gitlabTypes.js.map +1 -0
  199. package/dist/providers/gitlab/index.d.ts +5 -0
  200. package/dist/providers/gitlab/index.d.ts.map +1 -0
  201. package/dist/providers/gitlab/index.js +4 -0
  202. package/dist/providers/gitlab/index.js.map +1 -0
  203. package/dist/providers/gitlab/mappers.d.ts +26 -0
  204. package/dist/providers/gitlab/mappers.d.ts.map +1 -0
  205. package/dist/providers/gitlab/mappers.js +63 -0
  206. package/dist/providers/gitlab/mappers.js.map +1 -0
  207. package/dist/providers/index.d.ts +7 -0
  208. package/dist/providers/index.d.ts.map +1 -0
  209. package/dist/providers/index.js +7 -0
  210. package/dist/providers/index.js.map +1 -0
  211. package/dist/providers/jira/adfConverter.d.ts +32 -0
  212. package/dist/providers/jira/adfConverter.d.ts.map +1 -0
  213. package/dist/providers/jira/adfConverter.js +144 -0
  214. package/dist/providers/jira/adfConverter.js.map +1 -0
  215. package/dist/providers/jira/index.d.ts +8 -0
  216. package/dist/providers/jira/index.d.ts.map +1 -0
  217. package/dist/providers/jira/index.js +5 -0
  218. package/dist/providers/jira/index.js.map +1 -0
  219. package/dist/providers/jira/jiraApiClient.d.ts +42 -0
  220. package/dist/providers/jira/jiraApiClient.d.ts.map +1 -0
  221. package/dist/providers/jira/jiraApiClient.js +84 -0
  222. package/dist/providers/jira/jiraApiClient.js.map +1 -0
  223. package/dist/providers/jira/jiraBoardManager.d.ts +11 -0
  224. package/dist/providers/jira/jiraBoardManager.d.ts.map +1 -0
  225. package/dist/providers/jira/jiraBoardManager.js +27 -0
  226. package/dist/providers/jira/jiraBoardManager.js.map +1 -0
  227. package/dist/providers/jira/jiraIssueTracker.d.ts +53 -0
  228. package/dist/providers/jira/jiraIssueTracker.d.ts.map +1 -0
  229. package/dist/providers/jira/jiraIssueTracker.js +231 -0
  230. package/dist/providers/jira/jiraIssueTracker.js.map +1 -0
  231. package/dist/providers/jira/jiraTypes.d.ts +61 -0
  232. package/dist/providers/jira/jiraTypes.d.ts.map +1 -0
  233. package/dist/providers/jira/jiraTypes.js +6 -0
  234. package/dist/providers/jira/jiraTypes.js.map +1 -0
  235. package/dist/providers/types.d.ts +271 -0
  236. package/dist/providers/types.d.ts.map +1 -0
  237. package/dist/providers/types.js +52 -0
  238. package/dist/providers/types.js.map +1 -0
  239. package/dist/providers/workspaceValidation.d.ts +18 -0
  240. package/dist/providers/workspaceValidation.d.ts.map +1 -0
  241. package/dist/providers/workspaceValidation.js +37 -0
  242. package/dist/providers/workspaceValidation.js.map +1 -0
  243. package/package.json +66 -0
@@ -0,0 +1,209 @@
1
+ /**
2
+ * GitHub implementation of the IssueTracker provider interface.
3
+ *
4
+ * Binds `createGhRepoApi(ctx)` once at construction, over a `GitContext` the
5
+ * caller already holds — the adapter constructs no context, resolves no
6
+ * token, and reads no environment. Every method reproduces the command,
7
+ * parse, error policy and log line of its absorbed legacy free function
8
+ * (`adws/github/issueApi.ts` / `issueListApi.ts` / `labelManager.ts` /
9
+ * `projectBoardApi.ts`) exactly, logging through the injected `Logger` port.
10
+ * The HITL Slack notification and the `adw:*` label catalogue are ADW
11
+ * behaviours re-homed as the optional `onStatusMoved`/`resolveLabelDefinition`
12
+ * seams — the library itself never learns about Slack or about ADW's colours.
13
+ */
14
+ import { consoleLogger } from '../../git/index.js';
15
+ import { validateRepoIdentifier } from '../types.js';
16
+ import { createGhRepoApi } from './ghRepoApi.js';
17
+ import { assertContextBoundTo } from './contextBinding.js';
18
+ import { parseGitHubIssue, parseIssueState, parseIssueTitle, parseIssueCommentsRest, parseIssueLabelNames, parseCreatedIssueNumber, parseFirstIssueNumber, parseIssueSummaries, parseIssueListEntries, } from './ghIssueParsers.js';
19
+ import { mapGitHubIssueToIssue, mapIssueCommentSummaryToIssueComment } from './mappers.js';
20
+ function isLabelNotFoundError(error) {
21
+ return /not found/i.test(String(error));
22
+ }
23
+ function defaultLabelDefinition(label) {
24
+ return { name: label, color: 'ededed', description: '' };
25
+ }
26
+ /**
27
+ * IssueTracker implementation for GitHub Issues, bound to a specific
28
+ * repository and `GitContext` at construction time.
29
+ */
30
+ export class GitHubIssueTracker {
31
+ repoId;
32
+ gh;
33
+ logger;
34
+ onStatusMoved;
35
+ resolveLabelDefinition;
36
+ constructor(ctx, repoId, deps = {}) {
37
+ this.repoId = repoId;
38
+ validateRepoIdentifier(repoId);
39
+ assertContextBoundTo(ctx, repoId, 'createGitHubIssueTracker');
40
+ this.gh = createGhRepoApi(ctx);
41
+ this.logger = deps.logger ?? consoleLogger;
42
+ this.onStatusMoved = deps.onStatusMoved;
43
+ this.resolveLabelDefinition = deps.resolveLabelDefinition ?? defaultLabelDefinition;
44
+ }
45
+ async fetchIssue(issueNumber) {
46
+ try {
47
+ return mapGitHubIssueToIssue(parseGitHubIssue(this.gh.fetchIssue(issueNumber)));
48
+ }
49
+ catch (error) {
50
+ throw new Error(`Failed to fetch issue #${issueNumber}: ${error}`);
51
+ }
52
+ }
53
+ commentOnIssue(issueNumber, body) {
54
+ try {
55
+ this.gh.commentOnIssue(issueNumber, body);
56
+ this.logger(`Commented on issue #${issueNumber}`, 'success');
57
+ }
58
+ catch (error) {
59
+ this.logger(`Failed to comment on issue: ${error}`, 'error');
60
+ }
61
+ }
62
+ deleteComment(commentId) {
63
+ const id = Number(commentId);
64
+ try {
65
+ this.gh.deleteIssueComment(id);
66
+ this.logger(`Deleted comment ${id}`, 'success');
67
+ }
68
+ catch (error) {
69
+ throw new Error(`Failed to delete comment ${id}: ${error}`);
70
+ }
71
+ }
72
+ getIssueState(issueNumber) {
73
+ try {
74
+ return parseIssueState(this.gh.issueState(issueNumber));
75
+ }
76
+ catch (error) {
77
+ this.logger(`Failed to get issue state for #${issueNumber}: ${error}`, 'error');
78
+ throw error;
79
+ }
80
+ }
81
+ async closeIssue(issueNumber, comment) {
82
+ try {
83
+ const state = this.getIssueState(issueNumber);
84
+ if (state === 'CLOSED') {
85
+ this.logger(`Issue #${issueNumber} is already closed, skipping`, 'info');
86
+ return false;
87
+ }
88
+ if (comment) {
89
+ this.commentOnIssue(issueNumber, comment);
90
+ }
91
+ this.gh.closeIssue(issueNumber);
92
+ this.logger(`Closed issue #${issueNumber}`, 'success');
93
+ return true;
94
+ }
95
+ catch (error) {
96
+ this.logger(`Failed to close issue #${issueNumber}: ${error}`, 'error');
97
+ return false;
98
+ }
99
+ }
100
+ fetchComments(issueNumber) {
101
+ try {
102
+ return parseIssueCommentsRest(this.gh.fetchIssueComments(issueNumber)).map(mapIssueCommentSummaryToIssueComment);
103
+ }
104
+ catch (error) {
105
+ throw new Error(`Failed to fetch comments for issue #${issueNumber}: ${error}`);
106
+ }
107
+ }
108
+ async moveToStatus(issueNumber, status) {
109
+ try {
110
+ const moved = this.gh.moveIssueToStatus(issueNumber, status);
111
+ if (moved) {
112
+ await this.onStatusMoved?.(issueNumber, status);
113
+ }
114
+ return moved;
115
+ }
116
+ catch (error) {
117
+ this.logger(`Failed to move issue #${issueNumber} to "${status}": ${error}`, 'error');
118
+ return false;
119
+ }
120
+ }
121
+ fetchLabels(issueNumber) {
122
+ try {
123
+ return parseIssueLabelNames(this.gh.issueLabels(issueNumber));
124
+ }
125
+ catch (error) {
126
+ this.logger(`fetchIssueLabels: failed to fetch labels on issue #${issueNumber}: ${error}`, 'warn');
127
+ return [];
128
+ }
129
+ }
130
+ addLabel(issueNumber, labelName) {
131
+ try {
132
+ this.gh.addIssueLabel(issueNumber, labelName);
133
+ this.logger(`Added label "${labelName}" to issue #${issueNumber}`, 'success');
134
+ }
135
+ catch (error) {
136
+ this.logger(`Failed to add label "${labelName}" to issue #${issueNumber}: ${error}`, 'error');
137
+ }
138
+ }
139
+ applyLabel(issueNumber, labelName) {
140
+ try {
141
+ this.gh.applyLabel(issueNumber, labelName);
142
+ return;
143
+ }
144
+ catch (error) {
145
+ if (!isLabelNotFoundError(error)) {
146
+ this.logger(`applyLabel: unexpected error adding label "${labelName}" to issue #${issueNumber}: ${error}`, 'error');
147
+ throw error;
148
+ }
149
+ }
150
+ this.logger(`applyLabel: label "${labelName}" not found on repo, lazy-creating`, 'warn');
151
+ const def = this.resolveLabelDefinition(labelName);
152
+ this.gh.createLabel(def.name, def.color, def.description);
153
+ this.gh.applyLabel(issueNumber, labelName);
154
+ }
155
+ ensureLabel(name, color, description) {
156
+ this.gh.createLabel(name, color, description);
157
+ }
158
+ createIssue(title, body) {
159
+ const issueNumber = parseCreatedIssueNumber(this.gh.createIssue(title, body));
160
+ this.logger(`Created issue #${issueNumber}: ${title}`, 'success');
161
+ return issueNumber;
162
+ }
163
+ updateIssueBody(issueNumber, body) {
164
+ try {
165
+ this.gh.updateIssueBody(issueNumber, body);
166
+ this.logger(`Updated body of issue #${issueNumber}`, 'success');
167
+ }
168
+ catch (error) {
169
+ this.logger(`Failed to update body of issue #${issueNumber}: ${error}`, 'error');
170
+ throw error;
171
+ }
172
+ }
173
+ searchOpenIssues(search, limit) {
174
+ try {
175
+ return parseIssueSummaries(this.gh.listOpenIssues({ fields: ['number', 'title'], search, limit }));
176
+ }
177
+ catch {
178
+ return [];
179
+ }
180
+ }
181
+ findOpenUpgradeIssue() {
182
+ try {
183
+ return parseFirstIssueNumber(this.gh.findOpenUpgradeIssue());
184
+ }
185
+ catch {
186
+ return null;
187
+ }
188
+ }
189
+ listIssues(query) {
190
+ return parseIssueListEntries(this.gh.listOpenIssues(query));
191
+ }
192
+ getIssueTitle(issueNumber) {
193
+ try {
194
+ return parseIssueTitle(this.gh.issueTitle(issueNumber));
195
+ }
196
+ catch {
197
+ return '(unknown)';
198
+ }
199
+ }
200
+ }
201
+ /**
202
+ * Factory function to create a GitHub IssueTracker provider, bound to the
203
+ * given `GitContext` and repository. Refuses a context bound to a different
204
+ * owner/repo than `repoId`.
205
+ */
206
+ export function createGitHubIssueTracker(ctx, repoId, deps = {}) {
207
+ return new GitHubIssueTracker(ctx, repoId, deps);
208
+ }
209
+ //# sourceMappingURL=githubIssueTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubIssueTracker.js","sourceRoot":"","sources":["../../../src/providers/github/githubIssueTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * TokenProvider port — GitHub implementation.
3
+ *
4
+ * Lives in the GitHub forge adapter (#792). It owns the resolution order
5
+ * (App installation token → PAT → `gh auth token`) and the
6
+ * PAT-versus-installation-token decision, so the core does not: the core
7
+ * only ever declares a forge-neutral {@link CredentialPurpose}.
8
+ *
9
+ * All sources are injected — this file reads no environment variable — and
10
+ * wraps, rather than replaces, the existing pure {@link resolveContextToken}.
11
+ */
12
+ import type { TokenProvider } from '../../git/types.js';
13
+ export interface GitHubTokenProviderInput {
14
+ /** Candidate in the resolution order, after the App mint. */
15
+ pat?: string | undefined;
16
+ /**
17
+ * Credential served to `'alternateIdentity'` requests. Absent (or
18
+ * whitespace-only) → falls back to the resolved token, preserving
19
+ * `runGraphQLInput`'s documented graceful fallback.
20
+ */
21
+ alternateIdentityPat?: string | undefined;
22
+ isAppConfigured: () => boolean;
23
+ /** Must throw loudly if the App is not installed on owner/repo (foreign identity). */
24
+ mintInstallationToken: (owner: string, repo: string) => string;
25
+ /** Returns `gh auth token` output, or empty string when gh is not configured. */
26
+ ghAuthToken: () => string;
27
+ }
28
+ /**
29
+ * Builds the port's GitHub implementation. Holds no memo of any kind — every
30
+ * call re-enters `resolveContextToken`. The only caching on this path is
31
+ * `appAuth.ts`'s expiry-aware installation-token cache, which lives inside
32
+ * the credential source (where the PRD wants it), not here.
33
+ */
34
+ export declare function createGitHubTokenProvider(input: GitHubTokenProviderInput): TokenProvider;
35
+ /**
36
+ * A TokenProvider that serves a fixed credential — `alternateIdentityPat`
37
+ * (when given) for `'alternateIdentity'` requests, `token` otherwise. For
38
+ * tests and fixtures; production boundaries use {@link createGitHubTokenProvider}.
39
+ */
40
+ export declare function createLiteralTokenProvider(token: string, alternateIdentityPat?: string): TokenProvider;
41
+ //# sourceMappingURL=githubTokenProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubTokenProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/github/githubTokenProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAqB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE3E,MAAM,WAAW,wBAAwB;IACvC,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,sFAAsF;IACtF,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D,iFAAiF;IACjF,WAAW,EAAE,MAAM,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB,GAAG,aAAa,CAmBxF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,aAAa,CAMtG"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * TokenProvider port — GitHub implementation.
3
+ *
4
+ * Lives in the GitHub forge adapter (#792). It owns the resolution order
5
+ * (App installation token → PAT → `gh auth token`) and the
6
+ * PAT-versus-installation-token decision, so the core does not: the core
7
+ * only ever declares a forge-neutral {@link CredentialPurpose}.
8
+ *
9
+ * All sources are injected — this file reads no environment variable — and
10
+ * wraps, rather than replaces, the existing pure {@link resolveContextToken}.
11
+ */
12
+ import { resolveContextToken } from './tokenResolver.js';
13
+ /**
14
+ * Builds the port's GitHub implementation. Holds no memo of any kind — every
15
+ * call re-enters `resolveContextToken`. The only caching on this path is
16
+ * `appAuth.ts`'s expiry-aware installation-token cache, which lives inside
17
+ * the credential source (where the PRD wants it), not here.
18
+ */
19
+ export function createGitHubTokenProvider(input) {
20
+ return {
21
+ credentialEnv(request) {
22
+ const { owner, repo, purpose } = request;
23
+ if (purpose === 'alternateIdentity' && input.alternateIdentityPat?.trim()) {
24
+ return { GH_TOKEN: input.alternateIdentityPat };
25
+ }
26
+ return {
27
+ GH_TOKEN: resolveContextToken({
28
+ owner,
29
+ repo,
30
+ pat: input.pat,
31
+ isAppConfigured: input.isAppConfigured,
32
+ mintInstallationToken: input.mintInstallationToken,
33
+ ghAuthToken: input.ghAuthToken,
34
+ }),
35
+ };
36
+ },
37
+ };
38
+ }
39
+ /**
40
+ * A TokenProvider that serves a fixed credential — `alternateIdentityPat`
41
+ * (when given) for `'alternateIdentity'` requests, `token` otherwise. For
42
+ * tests and fixtures; production boundaries use {@link createGitHubTokenProvider}.
43
+ */
44
+ export function createLiteralTokenProvider(token, alternateIdentityPat) {
45
+ return {
46
+ credentialEnv({ purpose }) {
47
+ return { GH_TOKEN: (purpose === 'alternateIdentity' && alternateIdentityPat) ? alternateIdentityPat : token };
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=githubTokenProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubTokenProvider.js","sourceRoot":"","sources":["../../../src/providers/github/githubTokenProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAmBzD;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAA+B;IACvE,OAAO;QACL,aAAa,CAAC,OAA0B;YACtC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;YACzC,IAAI,OAAO,KAAK,mBAAmB,IAAI,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC1E,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAClD,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,mBAAmB,CAAC;oBAC5B,KAAK;oBACL,IAAI;oBACJ,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,eAAe,EAAE,KAAK,CAAC,eAAe;oBACtC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;oBAClD,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC;aACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa,EAAE,oBAA6B;IACrF,OAAO;QACL,aAAa,CAAC,EAAE,OAAO,EAAqB;YAC1C,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,KAAK,mBAAmB,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAChH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { createGitHubIssueTracker, GitHubIssueTracker } from './githubIssueTracker.js';
2
+ export type { GitHubIssueTrackerDeps, GitHubLabelDefinition } from './githubIssueTracker.js';
3
+ export { createGitHubCodeHost, GitHubCodeHost } from './githubCodeHost.js';
4
+ export type { GitHubCodeHostDeps } from './githubCodeHost.js';
5
+ export { createGitHubBoardManager } from './githubBoardManager.js';
6
+ export type { GitHubBoardManagerDeps } from './githubBoardManager.js';
7
+ export type { GitHubUser, GitHubLabel, GitHubMilestone, GitHubComment, GitHubIssueListItem, GitHubIssue, IssueCommentSummary, } from './domain/issue.js';
8
+ export type { PRReviewComment, PRDetails, PRListItem, RawPR } from './domain/pullRequest.js';
9
+ export * from './mappers.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACvF,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3E,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,YAAY,EACV,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EACvD,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,GACtD,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC7F,cAAc,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { createGitHubIssueTracker, GitHubIssueTracker } from './githubIssueTracker.js';
2
+ export { createGitHubCodeHost, GitHubCodeHost } from './githubCodeHost.js';
3
+ export { createGitHubBoardManager } from './githubBoardManager.js';
4
+ export * from './mappers.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAOnE,cAAc,cAAc,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Pure mapper functions that convert between GitHub-specific types and
3
+ * platform-agnostic provider types.
4
+ * All functions are pure — no side effects, no imports of global state.
5
+ */
6
+ import type { GitHubIssue, GitHubComment, IssueCommentSummary } from './domain/issue.js';
7
+ import type { PRDetails, PRReviewComment, PRListItem, RawPR } from './domain/pullRequest.js';
8
+ import type { Issue, IssueComment, PullRequest, PullRequestSummary, ReviewComment } from '../types.js';
9
+ /**
10
+ * Maps a GitHubComment to a platform-agnostic IssueComment.
11
+ */
12
+ export declare function mapGitHubCommentToIssueComment(comment: GitHubComment): IssueComment;
13
+ /**
14
+ * Maps a GitHubIssue to a platform-agnostic Issue.
15
+ */
16
+ export declare function mapGitHubIssueToIssue(issue: GitHubIssue): Issue;
17
+ /**
18
+ * Maps an IssueCommentSummary (REST API format) to a platform-agnostic IssueComment.
19
+ */
20
+ export declare function mapIssueCommentSummaryToIssueComment(comment: IssueCommentSummary): IssueComment;
21
+ /**
22
+ * Maps a GitHub PRDetails object to a platform-agnostic PullRequest.
23
+ */
24
+ export declare function mapPRDetailsToPullRequest(pr: PRDetails): PullRequest;
25
+ /**
26
+ * Maps a GitHub PRReviewComment to a platform-agnostic ReviewComment.
27
+ */
28
+ export declare function mapPRReviewCommentToReviewComment(comment: PRReviewComment): ReviewComment;
29
+ /**
30
+ * Maps a GitHub PRListItem to a platform-agnostic PullRequest.
31
+ * PRListItem carries only number and headBranch, so remaining fields are empty strings.
32
+ * The listing op returns open PRs only, so `state` is always `'OPEN'`.
33
+ */
34
+ export declare function mapPRListItemToPullRequest(item: PRListItem): PullRequest;
35
+ /**
36
+ * Maps a RawPR (from `defaultFindPRByBranch`) to a platform-agnostic PullRequestSummary.
37
+ * Flattens `labels?: {name}[]` to `string[]`, defaulting a missing field to `[]`.
38
+ */
39
+ export declare function mapRawPRToSummary(pr: RawPR): PullRequestSummary;
40
+ //# sourceMappingURL=mappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../../src/providers/github/mappers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIvG;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAOnF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAW/D;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAO/F;AAID;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,SAAS,GAAG,WAAW,CAWpE;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAUzF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAUxE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,KAAK,GAAG,kBAAkB,CAQ/D"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Pure mapper functions that convert between GitHub-specific types and
3
+ * platform-agnostic provider types.
4
+ * All functions are pure — no side effects, no imports of global state.
5
+ */
6
+ // ── IssueTracker mappers ──────────────────────────────────────────────
7
+ /**
8
+ * Maps a GitHubComment to a platform-agnostic IssueComment.
9
+ */
10
+ export function mapGitHubCommentToIssueComment(comment) {
11
+ return {
12
+ id: comment.id,
13
+ body: comment.body,
14
+ author: comment.author.login,
15
+ createdAt: comment.createdAt,
16
+ };
17
+ }
18
+ /**
19
+ * Maps a GitHubIssue to a platform-agnostic Issue.
20
+ */
21
+ export function mapGitHubIssueToIssue(issue) {
22
+ return {
23
+ id: issue.number.toString(),
24
+ number: issue.number,
25
+ title: issue.title,
26
+ body: issue.body,
27
+ state: issue.state,
28
+ author: issue.author.login,
29
+ labels: issue.labels.map((l) => l.name),
30
+ comments: issue.comments.map(mapGitHubCommentToIssueComment),
31
+ };
32
+ }
33
+ /**
34
+ * Maps an IssueCommentSummary (REST API format) to a platform-agnostic IssueComment.
35
+ */
36
+ export function mapIssueCommentSummaryToIssueComment(comment) {
37
+ return {
38
+ id: comment.id.toString(),
39
+ body: comment.body,
40
+ author: comment.authorLogin,
41
+ createdAt: comment.createdAt,
42
+ };
43
+ }
44
+ // ── CodeHost mappers ──────────────────────────────────────────────────
45
+ /**
46
+ * Maps a GitHub PRDetails object to a platform-agnostic PullRequest.
47
+ */
48
+ export function mapPRDetailsToPullRequest(pr) {
49
+ return {
50
+ number: pr.number,
51
+ title: pr.title,
52
+ body: pr.body,
53
+ sourceBranch: pr.headBranch,
54
+ targetBranch: pr.baseBranch,
55
+ url: pr.url,
56
+ linkedIssueNumber: pr.issueNumber ?? undefined,
57
+ state: pr.state,
58
+ };
59
+ }
60
+ /**
61
+ * Maps a GitHub PRReviewComment to a platform-agnostic ReviewComment.
62
+ */
63
+ export function mapPRReviewCommentToReviewComment(comment) {
64
+ return {
65
+ id: String(comment.id),
66
+ body: comment.body,
67
+ author: comment.author.login,
68
+ createdAt: comment.createdAt,
69
+ path: comment.path || undefined,
70
+ line: comment.line ?? undefined,
71
+ isBot: comment.author.isBot,
72
+ };
73
+ }
74
+ /**
75
+ * Maps a GitHub PRListItem to a platform-agnostic PullRequest.
76
+ * PRListItem carries only number and headBranch, so remaining fields are empty strings.
77
+ * The listing op returns open PRs only, so `state` is always `'OPEN'`.
78
+ */
79
+ export function mapPRListItemToPullRequest(item) {
80
+ return {
81
+ number: item.number,
82
+ title: '',
83
+ body: '',
84
+ sourceBranch: item.headBranch,
85
+ targetBranch: '',
86
+ url: '',
87
+ state: 'OPEN',
88
+ };
89
+ }
90
+ /**
91
+ * Maps a RawPR (from `defaultFindPRByBranch`) to a platform-agnostic PullRequestSummary.
92
+ * Flattens `labels?: {name}[]` to `string[]`, defaulting a missing field to `[]`.
93
+ */
94
+ export function mapRawPRToSummary(pr) {
95
+ return {
96
+ number: pr.number,
97
+ state: pr.state,
98
+ sourceBranch: pr.headRefName,
99
+ targetBranch: pr.baseRefName,
100
+ labels: (pr.labels ?? []).map((l) => l.name),
101
+ };
102
+ }
103
+ //# sourceMappingURL=mappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../src/providers/github/mappers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Veracious token resolver — absorbed into the gitContext package (issue #700).
3
+ *
4
+ * Single canonical token resolution replacing the two prior resolvers
5
+ * (`resolveToken` in gitContextFactory.ts, `resolveLaunchToken` in
6
+ * launchGitContext.ts). Both fell through to process.env.GH_TOKEN — the
7
+ * GH_TOKEN-bleed vector responsible for ~13 "wrong repo" incidents. This
8
+ * resolver never reads process.env.GH_TOKEN as a token source (PRD story 2).
9
+ *
10
+ * All I/O is injected for hermetic testing.
11
+ */
12
+ export interface ResolveContextTokenInput {
13
+ owner: string;
14
+ repo: string;
15
+ pat?: string | undefined;
16
+ isAppConfigured: () => boolean;
17
+ /** Must throw loudly if the App is not installed on owner/repo (foreign identity). */
18
+ mintInstallationToken: (owner: string, repo: string) => string;
19
+ /** Returns `gh auth token` output, or empty string when gh is not configured. */
20
+ ghAuthToken: () => string;
21
+ }
22
+ /**
23
+ * Resolves a GitHub token bound to the specified owner/repo.
24
+ *
25
+ * Resolution order (guard-clause style):
26
+ * 1. App configured → return mint bound to owner/repo; propagate any throw
27
+ * loudly (foreign/uninstalled identity = hard error, never substitute ambient)
28
+ * 2. PAT set → return PAT
29
+ * 3. `gh auth token` non-empty → return it
30
+ * 4. Throw "no veracious token" — never fall back to process.env.GH_TOKEN
31
+ *
32
+ * process.env.GH_TOKEN is NEVER read here. The ambient-global fallthrough was
33
+ * the root cause of the GH_TOKEN-bleed class (vestmatic #143/#181/#187). Any
34
+ * token returned here is provably bound to the given owner/repo.
35
+ */
36
+ export declare function resolveContextToken(input: ResolveContextTokenInput): string;
37
+ //# sourceMappingURL=tokenResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenResolver.d.ts","sourceRoot":"","sources":["../../../src/providers/github/tokenResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,sFAAsF;IACtF,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D,iFAAiF;IACjF,WAAW,EAAE,MAAM,MAAM,CAAC;CAC3B;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAe3E"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Veracious token resolver — absorbed into the gitContext package (issue #700).
3
+ *
4
+ * Single canonical token resolution replacing the two prior resolvers
5
+ * (`resolveToken` in gitContextFactory.ts, `resolveLaunchToken` in
6
+ * launchGitContext.ts). Both fell through to process.env.GH_TOKEN — the
7
+ * GH_TOKEN-bleed vector responsible for ~13 "wrong repo" incidents. This
8
+ * resolver never reads process.env.GH_TOKEN as a token source (PRD story 2).
9
+ *
10
+ * All I/O is injected for hermetic testing.
11
+ */
12
+ // ---------------------------------------------------------------------------
13
+ // Resolver
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Resolves a GitHub token bound to the specified owner/repo.
17
+ *
18
+ * Resolution order (guard-clause style):
19
+ * 1. App configured → return mint bound to owner/repo; propagate any throw
20
+ * loudly (foreign/uninstalled identity = hard error, never substitute ambient)
21
+ * 2. PAT set → return PAT
22
+ * 3. `gh auth token` non-empty → return it
23
+ * 4. Throw "no veracious token" — never fall back to process.env.GH_TOKEN
24
+ *
25
+ * process.env.GH_TOKEN is NEVER read here. The ambient-global fallthrough was
26
+ * the root cause of the GH_TOKEN-bleed class (vestmatic #143/#181/#187). Any
27
+ * token returned here is provably bound to the given owner/repo.
28
+ */
29
+ export function resolveContextToken(input) {
30
+ const { owner, repo, pat, isAppConfigured, mintInstallationToken, ghAuthToken } = input;
31
+ if (isAppConfigured()) {
32
+ // Propagate loudly — foreign/uninstalled identity must fail at construction,
33
+ // not silently adopt a wrong-repo ambient token.
34
+ return mintInstallationToken(owner, repo);
35
+ }
36
+ if (pat?.trim())
37
+ return pat;
38
+ const t = ghAuthToken();
39
+ if (t.trim())
40
+ return t;
41
+ throw new Error(`resolveContextToken: no veracious token for ${owner}/${repo}`);
42
+ }
43
+ //# sourceMappingURL=tokenResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenResolver.js","sourceRoot":"","sources":["../../../src/providers/github/tokenResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAExF,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,6EAA6E;QAC7E,iDAAiD;QACjD,OAAO,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,GAAG,EAAE,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IAE5B,MAAM,CAAC,GAAG,WAAW,EAAE,CAAC;IACxB,IAAI,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;IAEvB,MAAM,IAAI,KAAK,CAAC,+CAA+C,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Low-level GitLab REST API v4 client using synchronous HTTP calls.
3
+ * Uses spawnSync with curl to match the synchronous CodeHost interface contract.
4
+ *
5
+ * Configuration is INJECTED (#818) — never read from the environment. Logs via the
6
+ * `Logger` port (adws/gitContext/types.ts), defaulting to `consoleLogger`.
7
+ * `runCurl` is the hermetic transport test seam; production uses a real curl.
8
+ */
9
+ import type { Logger } from '../../git/types.js';
10
+ import type { GitLabProject, GitLabMergeRequest, GitLabNote, GitLabDiscussion, GitLabCreateMRPayload } from './gitlabTypes.js';
11
+ /** The injected configuration `createGitLabCodeHost` takes (#818): the personal access token (api scope) and the instance origin, e.g. `https://gitlab.com`. Never read from the environment inside the adapter. */
12
+ export interface GitLabConfig {
13
+ readonly token: string;
14
+ readonly instanceUrl: string;
15
+ }
16
+ /** The result shape `spawnSync` satisfies structurally — the hermetic transport seam. */
17
+ export type CurlResult = {
18
+ readonly status: number | null;
19
+ readonly stdout: string;
20
+ readonly stderr: string;
21
+ readonly error?: Error;
22
+ };
23
+ /** Runs curl with the given argv, returning its result. Production default spawns a real curl; tests inject a recorder. */
24
+ export type CurlRunner = (args: readonly string[]) => CurlResult;
25
+ /** Deps idiom: both optional so a consumer that injects nothing gets `consoleLogger` and a real `curl`. */
26
+ export interface GitLabApiClientDeps {
27
+ readonly logger?: Logger;
28
+ readonly runCurl?: CurlRunner;
29
+ }
30
+ export declare class GitLabApiClient {
31
+ private readonly instanceUrl;
32
+ private readonly token;
33
+ private readonly logger;
34
+ private readonly runCurl;
35
+ constructor(config: GitLabConfig, deps?: GitLabApiClientDeps);
36
+ private request;
37
+ private encodePath;
38
+ getProject(projectPath: string): GitLabProject;
39
+ createMergeRequest(projectPath: string, payload: GitLabCreateMRPayload): GitLabMergeRequest;
40
+ getMergeRequest(projectPath: string, mrIid: number): GitLabMergeRequest;
41
+ createNote(projectPath: string, mrIid: number, body: string): GitLabNote;
42
+ listDiscussions(projectPath: string, mrIid: number): readonly GitLabDiscussion[];
43
+ listMergeRequests(projectPath: string, state?: string): readonly GitLabMergeRequest[];
44
+ }
45
+ //# sourceMappingURL=gitlabApiClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabApiClient.d.ts","sourceRoot":"","sources":["../../../src/providers/gitlab/gitlabApiClient.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,oNAAoN;AACpN,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,yFAAyF;AACzF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB,CAAC;AAEF,2HAA2H;AAC3H,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,UAAU,CAAC;AAEjE,2GAA2G;AAC3G,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;CAC/B;AAQD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAEzB,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,mBAAwB;IAOhE,OAAO,CAAC,OAAO;IAwDf,OAAO,CAAC,UAAU;IAIlB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;IAI9C,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,kBAAkB;IAQ3F,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB;IAOvE,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU;IAQxE,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,gBAAgB,EAAE;IAOhF,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,kBAAkB,EAAE;CAOtF"}