@ghx-dev/core 0.1.2 → 0.2.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 (181) hide show
  1. package/.claude-plugin/plugin.json +21 -0
  2. package/README.md +12 -15
  3. package/dist/cards/issue.assignees.add.yaml +50 -0
  4. package/dist/cards/issue.assignees.remove.yaml +50 -0
  5. package/dist/cards/issue.assignees.set.yaml +47 -0
  6. package/dist/cards/issue.close.yaml +16 -2
  7. package/dist/cards/issue.comments.create.yaml +16 -2
  8. package/dist/cards/issue.create.yaml +11 -0
  9. package/dist/cards/issue.delete.yaml +16 -2
  10. package/dist/cards/issue.labels.add.yaml +48 -0
  11. package/dist/cards/issue.labels.remove.yaml +50 -0
  12. package/dist/cards/issue.labels.set.yaml +47 -0
  13. package/dist/cards/issue.milestone.clear.yaml +40 -0
  14. package/dist/cards/issue.milestone.set.yaml +23 -4
  15. package/dist/{core/registry/cards/issue.blocked_by.add.yaml → cards/issue.relations.blocked_by.add.yaml} +3 -2
  16. package/dist/cards/{issue.blocked_by.remove.yaml → issue.relations.blocked_by.remove.yaml} +1 -1
  17. package/dist/cards/{issue.parent.remove.yaml → issue.relations.parent.remove.yaml} +11 -1
  18. package/dist/{core/registry/cards/issue.parent.set.yaml → cards/issue.relations.parent.set.yaml} +3 -2
  19. package/dist/{core/registry/cards/issue.linked_prs.list.yaml → cards/issue.relations.prs.list.yaml} +1 -1
  20. package/dist/cards/{issue.relations.get.yaml → issue.relations.view.yaml} +1 -1
  21. package/dist/cards/issue.reopen.yaml +16 -2
  22. package/dist/cards/issue.update.yaml +16 -2
  23. package/dist/cards/issue.view.yaml +7 -5
  24. package/dist/cards/{pr.review.submit_approve.yaml → pr.assignees.add.yaml} +12 -9
  25. package/dist/cards/pr.assignees.remove.yaml +29 -0
  26. package/dist/{core/registry/cards/pr.status.checks.yaml → cards/pr.checks.list.yaml} +15 -2
  27. package/dist/{core/registry/cards/pr.checks.rerun_all.yaml → cards/pr.checks.rerun.all.yaml} +2 -4
  28. package/dist/{core/registry/cards/pr.checks.rerun_failed.yaml → cards/pr.checks.rerun.failed.yaml} +3 -5
  29. package/dist/cards/pr.create.yaml +30 -0
  30. package/dist/cards/{pr.diff.list_files.yaml → pr.diff.files.yaml} +1 -1
  31. package/dist/cards/{pr.ready_for_review.set.yaml → pr.diff.view.yaml} +6 -8
  32. package/dist/{core/registry/cards/pr.mergeability.view.yaml → cards/pr.merge.status.yaml} +6 -3
  33. package/dist/{core/registry/cards/pr.merge.execute.yaml → cards/pr.merge.yaml} +1 -1
  34. package/dist/cards/pr.reviews.list.yaml +1 -1
  35. package/dist/cards/{pr.reviewers.request.yaml → pr.reviews.request.yaml} +1 -1
  36. package/dist/cards/pr.reviews.submit.yaml +67 -0
  37. package/dist/cards/{pr.comments.list.yaml → pr.threads.list.yaml} +2 -2
  38. package/dist/cards/{pr.comment.reply.yaml → pr.threads.reply.yaml} +4 -2
  39. package/dist/cards/{pr.comment.resolve.yaml → pr.threads.resolve.yaml} +1 -1
  40. package/dist/cards/{pr.comment.unresolve.yaml → pr.threads.unresolve.yaml} +1 -1
  41. package/dist/cards/pr.update.yaml +29 -0
  42. package/dist/cards/pr.view.yaml +7 -5
  43. package/dist/{core/registry/cards/project_v2.item.field.update.yaml → cards/project_v2.items.field.update.yaml} +1 -1
  44. package/dist/{core/registry/cards/project_v2.item.add_issue.yaml → cards/project_v2.items.issue.add.yaml} +1 -1
  45. package/dist/cards/project_v2.items.issue.remove.yaml +23 -0
  46. package/dist/{core/registry/cards/project_v2.org.get.yaml → cards/project_v2.org.view.yaml} +1 -1
  47. package/dist/cards/{project_v2.user.get.yaml → project_v2.user.view.yaml} +1 -1
  48. package/dist/{core/registry/cards/release.create_draft.yaml → cards/release.create.yaml} +1 -1
  49. package/dist/cards/{release.publish_draft.yaml → release.publish.yaml} +1 -1
  50. package/dist/{core/registry/cards/release.get.yaml → cards/release.view.yaml} +1 -1
  51. package/dist/cards/repo.view.yaml +2 -4
  52. package/dist/cards/{workflow_dispatch.run.yaml → workflow.dispatch.yaml} +1 -1
  53. package/dist/cards/{workflow_job.logs.get.yaml → workflow.job.logs.raw.yaml} +2 -2
  54. package/dist/{core/registry/cards/workflow_job.logs.analyze.yaml → cards/workflow.job.logs.view.yaml} +1 -1
  55. package/dist/{core/registry/cards/workflow_run.artifacts.list.yaml → cards/workflow.run.artifacts.list.yaml} +1 -1
  56. package/dist/cards/{workflow_run.cancel.yaml → workflow.run.cancel.yaml} +1 -1
  57. package/dist/cards/{workflow_run.rerun_all.yaml → workflow.run.rerun.all.yaml} +3 -3
  58. package/dist/{core/registry/cards/workflow_run.rerun_failed.yaml → cards/workflow.run.rerun.failed.yaml} +3 -3
  59. package/dist/{core/registry/cards/workflow_run.get.yaml → cards/workflow.run.view.yaml} +19 -4
  60. package/dist/cards/{workflow_runs.list.yaml → workflow.runs.list.yaml} +1 -1
  61. package/dist/cards/{workflow.get.yaml → workflow.view.yaml} +2 -2
  62. package/dist/chunk-3DU2WHXF.js +15 -0
  63. package/dist/chunk-3DU2WHXF.js.map +1 -0
  64. package/dist/chunk-3P3KHWFU.js +5779 -0
  65. package/dist/chunk-3P3KHWFU.js.map +1 -0
  66. package/dist/chunk-BIWBJA2F.js +228 -0
  67. package/dist/chunk-BIWBJA2F.js.map +1 -0
  68. package/dist/chunk-HEHONZTO.js +121 -0
  69. package/dist/chunk-HEHONZTO.js.map +1 -0
  70. package/dist/chunk-Q7RCIK2C.js +773 -0
  71. package/dist/chunk-Q7RCIK2C.js.map +1 -0
  72. package/dist/chunk-R3CBGJZX.js +12 -0
  73. package/dist/chunk-R3CBGJZX.js.map +1 -0
  74. package/dist/chunk-TDABI6C7.js +167 -0
  75. package/dist/chunk-TDABI6C7.js.map +1 -0
  76. package/dist/chunk-TPQYVCAS.js +15 -0
  77. package/dist/chunk-TPQYVCAS.js.map +1 -0
  78. package/dist/cli/index.js +202 -21
  79. package/dist/cli/index.js.map +1 -1
  80. package/dist/core/registry/cards/issue.assignees.add.yaml +50 -0
  81. package/dist/core/registry/cards/issue.assignees.remove.yaml +50 -0
  82. package/dist/core/registry/cards/issue.assignees.set.yaml +47 -0
  83. package/dist/core/registry/cards/issue.close.yaml +16 -2
  84. package/dist/core/registry/cards/issue.comments.create.yaml +16 -2
  85. package/dist/core/registry/cards/issue.create.yaml +11 -0
  86. package/dist/core/registry/cards/issue.delete.yaml +16 -2
  87. package/dist/core/registry/cards/issue.labels.add.yaml +48 -0
  88. package/dist/core/registry/cards/issue.labels.remove.yaml +50 -0
  89. package/dist/core/registry/cards/issue.labels.set.yaml +47 -0
  90. package/dist/core/registry/cards/issue.milestone.clear.yaml +40 -0
  91. package/dist/core/registry/cards/issue.milestone.set.yaml +23 -4
  92. package/dist/{cards/issue.blocked_by.add.yaml → core/registry/cards/issue.relations.blocked_by.add.yaml} +3 -2
  93. package/dist/core/registry/cards/{issue.blocked_by.remove.yaml → issue.relations.blocked_by.remove.yaml} +1 -1
  94. package/dist/core/registry/cards/{issue.parent.remove.yaml → issue.relations.parent.remove.yaml} +11 -1
  95. package/dist/{cards/issue.parent.set.yaml → core/registry/cards/issue.relations.parent.set.yaml} +3 -2
  96. package/dist/{cards/issue.linked_prs.list.yaml → core/registry/cards/issue.relations.prs.list.yaml} +1 -1
  97. package/dist/core/registry/cards/{issue.relations.get.yaml → issue.relations.view.yaml} +1 -1
  98. package/dist/core/registry/cards/issue.reopen.yaml +16 -2
  99. package/dist/core/registry/cards/issue.update.yaml +16 -2
  100. package/dist/core/registry/cards/issue.view.yaml +7 -5
  101. package/dist/core/registry/cards/pr.assignees.add.yaml +29 -0
  102. package/dist/core/registry/cards/pr.assignees.remove.yaml +29 -0
  103. package/dist/{cards/pr.status.checks.yaml → core/registry/cards/pr.checks.list.yaml} +15 -2
  104. package/dist/{cards/pr.checks.rerun_all.yaml → core/registry/cards/pr.checks.rerun.all.yaml} +2 -4
  105. package/dist/{cards/pr.checks.rerun_failed.yaml → core/registry/cards/pr.checks.rerun.failed.yaml} +3 -5
  106. package/dist/core/registry/cards/pr.create.yaml +30 -0
  107. package/dist/core/registry/cards/{pr.diff.list_files.yaml → pr.diff.files.yaml} +1 -1
  108. package/dist/core/registry/cards/{pr.ready_for_review.set.yaml → pr.diff.view.yaml} +6 -8
  109. package/dist/{cards/pr.mergeability.view.yaml → core/registry/cards/pr.merge.status.yaml} +6 -3
  110. package/dist/{cards/pr.merge.execute.yaml → core/registry/cards/pr.merge.yaml} +1 -1
  111. package/dist/core/registry/cards/pr.reviews.list.yaml +1 -1
  112. package/dist/core/registry/cards/{pr.reviewers.request.yaml → pr.reviews.request.yaml} +1 -1
  113. package/dist/core/registry/cards/pr.reviews.submit.yaml +67 -0
  114. package/dist/core/registry/cards/{pr.comments.list.yaml → pr.threads.list.yaml} +2 -2
  115. package/dist/core/registry/cards/{pr.comment.reply.yaml → pr.threads.reply.yaml} +4 -2
  116. package/dist/core/registry/cards/{pr.comment.resolve.yaml → pr.threads.resolve.yaml} +1 -1
  117. package/dist/core/registry/cards/{pr.comment.unresolve.yaml → pr.threads.unresolve.yaml} +1 -1
  118. package/dist/core/registry/cards/pr.update.yaml +29 -0
  119. package/dist/core/registry/cards/pr.view.yaml +7 -5
  120. package/dist/{cards/project_v2.item.field.update.yaml → core/registry/cards/project_v2.items.field.update.yaml} +1 -1
  121. package/dist/{cards/project_v2.item.add_issue.yaml → core/registry/cards/project_v2.items.issue.add.yaml} +1 -1
  122. package/dist/core/registry/cards/project_v2.items.issue.remove.yaml +23 -0
  123. package/dist/{cards/project_v2.org.get.yaml → core/registry/cards/project_v2.org.view.yaml} +1 -1
  124. package/dist/core/registry/cards/{project_v2.user.get.yaml → project_v2.user.view.yaml} +1 -1
  125. package/dist/{cards/release.create_draft.yaml → core/registry/cards/release.create.yaml} +1 -1
  126. package/dist/core/registry/cards/{release.publish_draft.yaml → release.publish.yaml} +1 -1
  127. package/dist/{cards/release.get.yaml → core/registry/cards/release.view.yaml} +1 -1
  128. package/dist/core/registry/cards/repo.view.yaml +2 -4
  129. package/dist/core/registry/cards/{workflow_dispatch.run.yaml → workflow.dispatch.yaml} +1 -1
  130. package/dist/core/registry/cards/{workflow_job.logs.get.yaml → workflow.job.logs.raw.yaml} +2 -2
  131. package/dist/{cards/workflow_job.logs.analyze.yaml → core/registry/cards/workflow.job.logs.view.yaml} +1 -1
  132. package/dist/{cards/workflow_run.artifacts.list.yaml → core/registry/cards/workflow.run.artifacts.list.yaml} +1 -1
  133. package/dist/core/registry/cards/{workflow_run.cancel.yaml → workflow.run.cancel.yaml} +1 -1
  134. package/dist/core/registry/cards/{workflow_run.rerun_all.yaml → workflow.run.rerun.all.yaml} +3 -3
  135. package/dist/{cards/workflow_run.rerun_failed.yaml → core/registry/cards/workflow.run.rerun.failed.yaml} +3 -3
  136. package/dist/{cards/workflow_run.get.yaml → core/registry/cards/workflow.run.view.yaml} +19 -4
  137. package/dist/core/registry/cards/{workflow_runs.list.yaml → workflow.runs.list.yaml} +1 -1
  138. package/dist/core/registry/cards/{workflow.get.yaml → workflow.view.yaml} +2 -2
  139. package/dist/index.d.ts +374 -35
  140. package/dist/index.js +33 -5
  141. package/dist/index.js.map +1 -1
  142. package/dist/issue-mutations-FJNZW7L5.js +668 -0
  143. package/dist/issue-mutations-FJNZW7L5.js.map +1 -0
  144. package/dist/issue-queries-GRA4MKPD.js +208 -0
  145. package/dist/issue-queries-GRA4MKPD.js.map +1 -0
  146. package/dist/pr-mutations-UG67YOF5.js +344 -0
  147. package/dist/pr-mutations-UG67YOF5.js.map +1 -0
  148. package/dist/pr-queries-UOEOXIJQ.js +331 -0
  149. package/dist/pr-queries-UOEOXIJQ.js.map +1 -0
  150. package/dist/repo-JDUHFPZF.js +66 -0
  151. package/dist/repo-JDUHFPZF.js.map +1 -0
  152. package/package.json +16 -13
  153. package/skills/using-ghx/SKILL.md +61 -0
  154. package/dist/agent.d.ts +0 -32
  155. package/dist/agent.js +0 -36
  156. package/dist/agent.js.map +0 -1
  157. package/dist/cards/check_run.annotations.list.yaml +0 -35
  158. package/dist/cards/issue.assignees.update.yaml +0 -27
  159. package/dist/cards/issue.labels.update.yaml +0 -27
  160. package/dist/cards/pr.assignees.update.yaml +0 -38
  161. package/dist/cards/pr.checks.get_failed.yaml +0 -42
  162. package/dist/cards/pr.review.submit_comment.yaml +0 -26
  163. package/dist/cards/pr.review.submit_request_changes.yaml +0 -26
  164. package/dist/cards/workflow_run.jobs.list.yaml +0 -35
  165. package/dist/chunk-2FCPR3XZ.js +0 -54
  166. package/dist/chunk-2FCPR3XZ.js.map +0 -1
  167. package/dist/chunk-RDUPMVHG.js +0 -4139
  168. package/dist/chunk-RDUPMVHG.js.map +0 -1
  169. package/dist/chunk-UN5YHUNK.js +0 -245
  170. package/dist/chunk-UN5YHUNK.js.map +0 -1
  171. package/dist/cli/assets/skills/ghx/SKILL.md +0 -57
  172. package/dist/core/registry/cards/check_run.annotations.list.yaml +0 -35
  173. package/dist/core/registry/cards/issue.assignees.update.yaml +0 -27
  174. package/dist/core/registry/cards/issue.labels.update.yaml +0 -27
  175. package/dist/core/registry/cards/pr.assignees.update.yaml +0 -38
  176. package/dist/core/registry/cards/pr.checks.get_failed.yaml +0 -42
  177. package/dist/core/registry/cards/pr.review.submit_approve.yaml +0 -26
  178. package/dist/core/registry/cards/pr.review.submit_comment.yaml +0 -26
  179. package/dist/core/registry/cards/pr.review.submit_request_changes.yaml +0 -26
  180. package/dist/core/registry/cards/workflow_run.jobs.list.yaml +0 -35
  181. package/dist/envelope-BpF6MNCv.d.ts +0 -55
@@ -0,0 +1,344 @@
1
+ import {
2
+ getSdk,
3
+ getSdk2,
4
+ getSdk3,
5
+ getSdk4,
6
+ getSdk5
7
+ } from "./chunk-TDABI6C7.js";
8
+ import {
9
+ PageInfoFieldsFragmentDoc
10
+ } from "./chunk-R3CBGJZX.js";
11
+ import {
12
+ asRecord,
13
+ assertPrCommentsListInput,
14
+ assertReplyToReviewThreadInput,
15
+ assertReviewThreadInput
16
+ } from "./chunk-BIWBJA2F.js";
17
+ import {
18
+ createGraphqlRequestClient
19
+ } from "./chunk-HEHONZTO.js";
20
+
21
+ // src/gql/operations/pr-comments-list.generated.ts
22
+ var PrCommentsListDocument = `
23
+ query PrCommentsList($owner: String!, $name: String!, $prNumber: Int!, $first: Int!, $after: String) {
24
+ repository(owner: $owner, name: $name) {
25
+ pullRequest(number: $prNumber) {
26
+ reviewThreads(first: $first, after: $after) {
27
+ edges {
28
+ cursor
29
+ node {
30
+ id
31
+ path
32
+ line
33
+ startLine
34
+ diffSide
35
+ subjectType
36
+ isResolved
37
+ isOutdated
38
+ viewerCanReply
39
+ viewerCanResolve
40
+ viewerCanUnresolve
41
+ resolvedBy {
42
+ login
43
+ }
44
+ comments(first: 20) {
45
+ nodes {
46
+ id
47
+ body
48
+ createdAt
49
+ url
50
+ author {
51
+ login
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
57
+ pageInfo {
58
+ ...PageInfoFields
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ ${PageInfoFieldsFragmentDoc}`;
65
+ var defaultWrapper = (action, _operationName, _operationType, _variables) => action();
66
+ function getSdk6(client, withWrapper = defaultWrapper) {
67
+ return {
68
+ PrCommentsList(variables, requestHeaders, signal) {
69
+ return withWrapper(
70
+ (wrappedRequestHeaders) => client.request({
71
+ document: PrCommentsListDocument,
72
+ variables,
73
+ requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },
74
+ signal
75
+ }),
76
+ "PrCommentsList",
77
+ "query",
78
+ variables
79
+ );
80
+ }
81
+ };
82
+ }
83
+
84
+ // src/gql/operations/review-thread-state.generated.ts
85
+ var ReviewThreadStateDocument = `
86
+ query ReviewThreadState($threadId: ID!) {
87
+ node(id: $threadId) {
88
+ ... on PullRequestReviewThread {
89
+ id
90
+ isResolved
91
+ }
92
+ }
93
+ }
94
+ `;
95
+ var defaultWrapper2 = (action, _operationName, _operationType, _variables) => action();
96
+ function getSdk7(client, withWrapper = defaultWrapper2) {
97
+ return {
98
+ ReviewThreadState(variables, requestHeaders, signal) {
99
+ return withWrapper(
100
+ (wrappedRequestHeaders) => client.request({
101
+ document: ReviewThreadStateDocument,
102
+ variables,
103
+ requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },
104
+ signal
105
+ }),
106
+ "ReviewThreadState",
107
+ "query",
108
+ variables
109
+ );
110
+ }
111
+ };
112
+ }
113
+
114
+ // src/gql/domains/pr-mutations.ts
115
+ var MAX_PR_REVIEW_THREAD_SCAN_PAGES = 5;
116
+ function normalizePrReviewThreadComment(comment) {
117
+ const commentRecord = asRecord(comment);
118
+ if (!commentRecord || typeof commentRecord.id !== "string") {
119
+ return null;
120
+ }
121
+ const author = asRecord(commentRecord.author);
122
+ const url = commentRecord.url;
123
+ return {
124
+ id: commentRecord.id,
125
+ authorLogin: typeof author?.login === "string" ? author.login : null,
126
+ body: typeof commentRecord.body === "string" ? commentRecord.body : "",
127
+ createdAt: typeof commentRecord.createdAt === "string" ? commentRecord.createdAt : "",
128
+ url: typeof url === "string" ? url : String(url ?? "")
129
+ };
130
+ }
131
+ function normalizePrReviewThread(thread) {
132
+ const threadRecord = asRecord(thread);
133
+ if (!threadRecord || typeof threadRecord.id !== "string") {
134
+ return null;
135
+ }
136
+ const comments = asRecord(threadRecord.comments);
137
+ const commentNodes = Array.isArray(comments?.nodes) ? comments.nodes : [];
138
+ const resolvedBy = asRecord(threadRecord.resolvedBy);
139
+ return {
140
+ id: threadRecord.id,
141
+ path: typeof threadRecord.path === "string" ? threadRecord.path : null,
142
+ line: typeof threadRecord.line === "number" ? threadRecord.line : null,
143
+ startLine: typeof threadRecord.startLine === "number" ? threadRecord.startLine : null,
144
+ diffSide: typeof threadRecord.diffSide === "string" ? threadRecord.diffSide : null,
145
+ subjectType: typeof threadRecord.subjectType === "string" ? threadRecord.subjectType : null,
146
+ isResolved: Boolean(threadRecord.isResolved),
147
+ isOutdated: Boolean(threadRecord.isOutdated),
148
+ viewerCanReply: Boolean(threadRecord.viewerCanReply),
149
+ viewerCanResolve: Boolean(threadRecord.viewerCanResolve),
150
+ viewerCanUnresolve: Boolean(threadRecord.viewerCanUnresolve),
151
+ resolvedByLogin: typeof resolvedBy?.login === "string" ? resolvedBy.login : null,
152
+ comments: commentNodes.map((comment) => normalizePrReviewThreadComment(comment)).flatMap((comment) => comment ? [comment] : [])
153
+ };
154
+ }
155
+ async function runPrCommentsList(transport, input) {
156
+ assertPrCommentsListInput(input);
157
+ const unresolvedOnly = input.unresolvedOnly ?? true;
158
+ const includeOutdated = input.includeOutdated ?? true;
159
+ const sdk = getSdk6(createGraphqlRequestClient(transport));
160
+ const filteredThreads = [];
161
+ let sourceEndCursor = input.after ?? null;
162
+ let sourceHasNextPage = false;
163
+ let pagesScanned = 0;
164
+ let sourceItemsScanned = 0;
165
+ while (pagesScanned < MAX_PR_REVIEW_THREAD_SCAN_PAGES && filteredThreads.length < input.first) {
166
+ const result = await sdk.PrCommentsList({
167
+ owner: input.owner,
168
+ name: input.name,
169
+ prNumber: input.prNumber,
170
+ first: input.first,
171
+ after: sourceEndCursor
172
+ });
173
+ const repository = asRecord(result.repository);
174
+ const pullRequest = asRecord(repository?.pullRequest);
175
+ const reviewThreads = asRecord(pullRequest?.reviewThreads);
176
+ if (!reviewThreads) {
177
+ throw new Error("Pull request review threads not found");
178
+ }
179
+ const pageInfo = asRecord(reviewThreads.pageInfo);
180
+ const threadEdges = Array.isArray(reviewThreads.edges) ? reviewThreads.edges.map((edge) => {
181
+ const edgeRecord = asRecord(edge);
182
+ if (!edgeRecord) {
183
+ return null;
184
+ }
185
+ return {
186
+ cursor: typeof edgeRecord.cursor === "string" ? edgeRecord.cursor : null,
187
+ node: edgeRecord.node
188
+ };
189
+ }).flatMap((edge) => edge ? [edge] : []) : [];
190
+ const threadNodes = threadEdges.length > 0 ? threadEdges : Array.isArray(reviewThreads.nodes) ? reviewThreads.nodes.map((node) => ({ cursor: null, node })) : [];
191
+ pagesScanned += 1;
192
+ sourceItemsScanned += threadNodes.length;
193
+ for (const threadNode of threadNodes) {
194
+ const normalized = normalizePrReviewThread(threadNode.node);
195
+ if (!normalized) {
196
+ continue;
197
+ }
198
+ if (unresolvedOnly && normalized.isResolved) {
199
+ continue;
200
+ }
201
+ if (unresolvedOnly && !includeOutdated && normalized.isOutdated) {
202
+ continue;
203
+ }
204
+ filteredThreads.push({ thread: normalized, cursor: threadNode.cursor });
205
+ }
206
+ sourceHasNextPage = Boolean(pageInfo?.hasNextPage);
207
+ sourceEndCursor = typeof pageInfo?.endCursor === "string" ? pageInfo.endCursor : null;
208
+ if (!sourceHasNextPage) {
209
+ break;
210
+ }
211
+ }
212
+ const hasBufferedFilteredItems = filteredThreads.length > input.first;
213
+ const returnedThreads = filteredThreads.slice(0, input.first);
214
+ const endCursor = returnedThreads.length > 0 ? returnedThreads[returnedThreads.length - 1]?.cursor ?? sourceEndCursor : sourceEndCursor;
215
+ const scanTruncated = sourceHasNextPage && pagesScanned >= MAX_PR_REVIEW_THREAD_SCAN_PAGES;
216
+ return {
217
+ items: returnedThreads.map((entry) => entry.thread),
218
+ pageInfo: {
219
+ hasNextPage: hasBufferedFilteredItems || sourceHasNextPage,
220
+ endCursor: hasBufferedFilteredItems || sourceHasNextPage ? endCursor : null
221
+ },
222
+ filterApplied: {
223
+ unresolvedOnly,
224
+ includeOutdated
225
+ },
226
+ scan: {
227
+ pagesScanned,
228
+ sourceItemsScanned,
229
+ scanTruncated
230
+ }
231
+ };
232
+ }
233
+ function parseReviewThreadMutationResult(result, mutationKey) {
234
+ const root = asRecord(result);
235
+ const mutation = asRecord(root?.[mutationKey]);
236
+ const thread = asRecord(mutation?.thread);
237
+ if (!thread || typeof thread.id !== "string") {
238
+ throw new Error("Review thread mutation failed");
239
+ }
240
+ return {
241
+ id: thread.id,
242
+ isResolved: Boolean(thread.isResolved)
243
+ };
244
+ }
245
+ async function runReplyToReviewThread(transport, input) {
246
+ assertReplyToReviewThreadInput(input);
247
+ const client = createGraphqlRequestClient(transport);
248
+ const replyResult = await getSdk(client).PrCommentReply({
249
+ threadId: input.threadId,
250
+ body: input.body
251
+ });
252
+ const mutation = asRecord(replyResult.addPullRequestReviewThreadReply);
253
+ const comment = asRecord(mutation?.comment);
254
+ if (!comment || typeof comment.id !== "string") {
255
+ throw new Error("Review thread mutation failed");
256
+ }
257
+ const threadStateResult = await getSdk7(client).ReviewThreadState({
258
+ threadId: input.threadId
259
+ });
260
+ const threadNode = asRecord(threadStateResult.node);
261
+ if (!threadNode || typeof threadNode.id !== "string") {
262
+ throw new Error("Review thread state lookup failed");
263
+ }
264
+ return {
265
+ id: input.threadId,
266
+ isResolved: Boolean(threadNode.isResolved),
267
+ commentId: comment.id,
268
+ commentUrl: typeof comment.url === "string" ? comment.url : ""
269
+ };
270
+ }
271
+ async function runResolveReviewThread(transport, input) {
272
+ assertReviewThreadInput(input);
273
+ const result = await getSdk2(
274
+ createGraphqlRequestClient(transport)
275
+ ).PrCommentResolve({
276
+ threadId: input.threadId
277
+ });
278
+ return parseReviewThreadMutationResult(result, "resolveReviewThread");
279
+ }
280
+ async function runUnresolveReviewThread(transport, input) {
281
+ assertReviewThreadInput(input);
282
+ const result = await getSdk3(
283
+ createGraphqlRequestClient(transport)
284
+ ).PrCommentUnresolve({
285
+ threadId: input.threadId
286
+ });
287
+ return parseReviewThreadMutationResult(result, "unresolveReviewThread");
288
+ }
289
+ function assertPrReviewSubmitInput(input) {
290
+ if (input.owner.trim().length === 0 || input.name.trim().length === 0) {
291
+ throw new Error("Repository owner and name are required");
292
+ }
293
+ if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {
294
+ throw new Error("PR number must be a positive integer");
295
+ }
296
+ if (!input.event || typeof input.event !== "string") {
297
+ throw new Error("Review event is required");
298
+ }
299
+ }
300
+ async function runSubmitPrReview(transport, input) {
301
+ assertPrReviewSubmitInput(input);
302
+ const client = createGraphqlRequestClient(transport);
303
+ const prIdResult = await getSdk4(client).PrNodeId({
304
+ owner: input.owner,
305
+ name: input.name,
306
+ prNumber: input.prNumber
307
+ });
308
+ const pullRequestId = prIdResult.repository?.pullRequest?.id;
309
+ if (!pullRequestId) {
310
+ throw new Error("Failed to retrieve pull request ID");
311
+ }
312
+ const threads = input.comments ? input.comments.map((comment) => ({
313
+ path: comment.path,
314
+ body: comment.body,
315
+ line: comment.line,
316
+ ...comment.side ? { side: comment.side } : {},
317
+ ...comment.startLine ? { startLine: comment.startLine } : {},
318
+ ...comment.startSide ? { startSide: comment.startSide } : {}
319
+ })) : [];
320
+ const result = await getSdk5(client).PrReviewSubmit({
321
+ pullRequestId,
322
+ event: input.event,
323
+ ...input.body === void 0 ? {} : { body: input.body },
324
+ ...threads.length === 0 ? {} : { threads }
325
+ });
326
+ const review = asRecord(asRecord(result.addPullRequestReview)?.pullRequestReview);
327
+ if (!review || typeof review.id !== "string") {
328
+ throw new Error("Failed to parse pull request review response");
329
+ }
330
+ return {
331
+ id: review.id,
332
+ state: typeof review.state === "string" ? review.state : "",
333
+ url: typeof review.url === "string" ? review.url : "",
334
+ body: typeof review.body === "string" ? review.body : null
335
+ };
336
+ }
337
+ export {
338
+ runPrCommentsList,
339
+ runReplyToReviewThread,
340
+ runResolveReviewThread,
341
+ runSubmitPrReview,
342
+ runUnresolveReviewThread
343
+ };
344
+ //# sourceMappingURL=pr-mutations-UG67YOF5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gql/operations/pr-comments-list.generated.ts","../src/gql/operations/review-thread-state.generated.ts","../src/gql/domains/pr-mutations.ts"],"sourcesContent":["import type { GraphQLClient, RequestOptions } from \"graphql-request\"\nimport type * as Types from \"./base-types.js\"\nimport { PageInfoFieldsFragmentDoc } from \"./fragments/page-info-fields.generated.js\"\n\ntype GraphQLClientRequestHeaders = RequestOptions[\"requestHeaders\"]\nexport type PrCommentsListQueryVariables = Types.Exact<{\n owner: Types.Scalars[\"String\"][\"input\"]\n name: Types.Scalars[\"String\"][\"input\"]\n prNumber: Types.Scalars[\"Int\"][\"input\"]\n first: Types.Scalars[\"Int\"][\"input\"]\n after?: Types.InputMaybe<Types.Scalars[\"String\"][\"input\"]>\n}>\n\nexport type PrCommentsListQuery = {\n __typename?: \"Query\"\n repository?: {\n __typename?: \"Repository\"\n pullRequest?: {\n __typename?: \"PullRequest\"\n reviewThreads: {\n __typename?: \"PullRequestReviewThreadConnection\"\n edges?: Array<{\n __typename?: \"PullRequestReviewThreadEdge\"\n cursor: string\n node?: {\n __typename?: \"PullRequestReviewThread\"\n id: string\n path: string\n line?: number | null\n startLine?: number | null\n diffSide: Types.DiffSide\n subjectType: Types.PullRequestReviewThreadSubjectType\n isResolved: boolean\n isOutdated: boolean\n viewerCanReply: boolean\n viewerCanResolve: boolean\n viewerCanUnresolve: boolean\n resolvedBy?: { __typename?: \"User\"; login: string } | null\n comments: {\n __typename?: \"PullRequestReviewCommentConnection\"\n nodes?: Array<{\n __typename?: \"PullRequestReviewComment\"\n id: string\n body: string\n createdAt: any\n url: any\n author?:\n | { __typename?: \"Bot\"; login: string }\n | { __typename?: \"EnterpriseUserAccount\"; login: string }\n | { __typename?: \"Mannequin\"; login: string }\n | { __typename?: \"Organization\"; login: string }\n | { __typename?: \"User\"; login: string }\n | null\n } | null> | null\n }\n } | null\n } | null> | null\n pageInfo: { __typename?: \"PageInfo\"; endCursor?: string | null; hasNextPage: boolean }\n }\n } | null\n } | null\n}\n\nexport const PrCommentsListDocument = `\n query PrCommentsList($owner: String!, $name: String!, $prNumber: Int!, $first: Int!, $after: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $prNumber) {\n reviewThreads(first: $first, after: $after) {\n edges {\n cursor\n node {\n id\n path\n line\n startLine\n diffSide\n subjectType\n isResolved\n isOutdated\n viewerCanReply\n viewerCanResolve\n viewerCanUnresolve\n resolvedBy {\n login\n }\n comments(first: 20) {\n nodes {\n id\n body\n createdAt\n url\n author {\n login\n }\n }\n }\n }\n }\n pageInfo {\n ...PageInfoFields\n }\n }\n }\n }\n}\n ${PageInfoFieldsFragmentDoc}`\n\nexport type SdkFunctionWrapper = <T>(\n action: (requestHeaders?: Record<string, string>) => Promise<T>,\n operationName: string,\n operationType?: string,\n variables?: any,\n) => Promise<T>\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) =>\n action()\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n PrCommentsList(\n variables: PrCommentsListQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<PrCommentsListQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<PrCommentsListQuery>({\n document: PrCommentsListDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"PrCommentsList\",\n \"query\",\n variables,\n )\n },\n }\n}\nexport type Sdk = ReturnType<typeof getSdk>\n","import type { GraphQLClient, RequestOptions } from \"graphql-request\"\nimport type * as Types from \"./base-types.js\"\n\ntype GraphQLClientRequestHeaders = RequestOptions[\"requestHeaders\"]\nexport type ReviewThreadStateQueryVariables = Types.Exact<{\n threadId: Types.Scalars[\"ID\"][\"input\"]\n}>\n\nexport type ReviewThreadStateQuery = {\n __typename?: \"Query\"\n node?:\n | { __typename?: \"AddedToMergeQueueEvent\" }\n | { __typename?: \"AddedToProjectEvent\" }\n | { __typename?: \"AddedToProjectV2Event\" }\n | { __typename?: \"App\" }\n | { __typename?: \"AssignedEvent\" }\n | { __typename?: \"AutoMergeDisabledEvent\" }\n | { __typename?: \"AutoMergeEnabledEvent\" }\n | { __typename?: \"AutoRebaseEnabledEvent\" }\n | { __typename?: \"AutoSquashEnabledEvent\" }\n | { __typename?: \"AutomaticBaseChangeFailedEvent\" }\n | { __typename?: \"AutomaticBaseChangeSucceededEvent\" }\n | { __typename?: \"BaseRefChangedEvent\" }\n | { __typename?: \"BaseRefDeletedEvent\" }\n | { __typename?: \"BaseRefForcePushedEvent\" }\n | { __typename?: \"Blob\" }\n | { __typename?: \"BlockedByAddedEvent\" }\n | { __typename?: \"BlockedByRemovedEvent\" }\n | { __typename?: \"BlockingAddedEvent\" }\n | { __typename?: \"BlockingRemovedEvent\" }\n | { __typename?: \"Bot\" }\n | { __typename?: \"BranchProtectionRule\" }\n | { __typename?: \"BypassForcePushAllowance\" }\n | { __typename?: \"BypassPullRequestAllowance\" }\n | { __typename?: \"CWE\" }\n | { __typename?: \"CheckRun\" }\n | { __typename?: \"CheckSuite\" }\n | { __typename?: \"ClosedEvent\" }\n | { __typename?: \"CodeOfConduct\" }\n | { __typename?: \"CommentDeletedEvent\" }\n | { __typename?: \"Commit\" }\n | { __typename?: \"CommitComment\" }\n | { __typename?: \"CommitCommentThread\" }\n | { __typename?: \"Comparison\" }\n | { __typename?: \"ConnectedEvent\" }\n | { __typename?: \"ConvertToDraftEvent\" }\n | { __typename?: \"ConvertedFromDraftEvent\" }\n | { __typename?: \"ConvertedNoteToIssueEvent\" }\n | { __typename?: \"ConvertedToDiscussionEvent\" }\n | { __typename?: \"CrossReferencedEvent\" }\n | { __typename?: \"DemilestonedEvent\" }\n | { __typename?: \"DependencyGraphManifest\" }\n | { __typename?: \"DeployKey\" }\n | { __typename?: \"DeployedEvent\" }\n | { __typename?: \"Deployment\" }\n | { __typename?: \"DeploymentEnvironmentChangedEvent\" }\n | { __typename?: \"DeploymentReview\" }\n | { __typename?: \"DeploymentStatus\" }\n | { __typename?: \"DisconnectedEvent\" }\n | { __typename?: \"Discussion\" }\n | { __typename?: \"DiscussionCategory\" }\n | { __typename?: \"DiscussionComment\" }\n | { __typename?: \"DiscussionPoll\" }\n | { __typename?: \"DiscussionPollOption\" }\n | { __typename?: \"DraftIssue\" }\n | { __typename?: \"Enterprise\" }\n | { __typename?: \"EnterpriseAdministratorInvitation\" }\n | { __typename?: \"EnterpriseIdentityProvider\" }\n | { __typename?: \"EnterpriseMemberInvitation\" }\n | { __typename?: \"EnterpriseRepositoryInfo\" }\n | { __typename?: \"EnterpriseServerInstallation\" }\n | { __typename?: \"EnterpriseServerUserAccount\" }\n | { __typename?: \"EnterpriseServerUserAccountEmail\" }\n | { __typename?: \"EnterpriseServerUserAccountsUpload\" }\n | { __typename?: \"EnterpriseUserAccount\" }\n | { __typename?: \"Environment\" }\n | { __typename?: \"ExternalIdentity\" }\n | { __typename?: \"Gist\" }\n | { __typename?: \"GistComment\" }\n | { __typename?: \"HeadRefDeletedEvent\" }\n | { __typename?: \"HeadRefForcePushedEvent\" }\n | { __typename?: \"HeadRefRestoredEvent\" }\n | { __typename?: \"IpAllowListEntry\" }\n | { __typename?: \"Issue\" }\n | { __typename?: \"IssueComment\" }\n | { __typename?: \"IssueType\" }\n | { __typename?: \"IssueTypeAddedEvent\" }\n | { __typename?: \"IssueTypeChangedEvent\" }\n | { __typename?: \"IssueTypeRemovedEvent\" }\n | { __typename?: \"Label\" }\n | { __typename?: \"LabeledEvent\" }\n | { __typename?: \"Language\" }\n | { __typename?: \"License\" }\n | { __typename?: \"LinkedBranch\" }\n | { __typename?: \"LockedEvent\" }\n | { __typename?: \"Mannequin\" }\n | { __typename?: \"MarkedAsDuplicateEvent\" }\n | { __typename?: \"MarketplaceCategory\" }\n | { __typename?: \"MarketplaceListing\" }\n | { __typename?: \"MemberFeatureRequestNotification\" }\n | { __typename?: \"MembersCanDeleteReposClearAuditEntry\" }\n | { __typename?: \"MembersCanDeleteReposDisableAuditEntry\" }\n | { __typename?: \"MembersCanDeleteReposEnableAuditEntry\" }\n | { __typename?: \"MentionedEvent\" }\n | { __typename?: \"MergeQueue\" }\n | { __typename?: \"MergeQueueEntry\" }\n | { __typename?: \"MergedEvent\" }\n | { __typename?: \"MigrationSource\" }\n | { __typename?: \"Milestone\" }\n | { __typename?: \"MilestonedEvent\" }\n | { __typename?: \"MovedColumnsInProjectEvent\" }\n | { __typename?: \"OIDCProvider\" }\n | { __typename?: \"OauthApplicationCreateAuditEntry\" }\n | { __typename?: \"OrgAddBillingManagerAuditEntry\" }\n | { __typename?: \"OrgAddMemberAuditEntry\" }\n | { __typename?: \"OrgBlockUserAuditEntry\" }\n | { __typename?: \"OrgConfigDisableCollaboratorsOnlyAuditEntry\" }\n | { __typename?: \"OrgConfigEnableCollaboratorsOnlyAuditEntry\" }\n | { __typename?: \"OrgCreateAuditEntry\" }\n | { __typename?: \"OrgDisableOauthAppRestrictionsAuditEntry\" }\n | { __typename?: \"OrgDisableSamlAuditEntry\" }\n | { __typename?: \"OrgDisableTwoFactorRequirementAuditEntry\" }\n | { __typename?: \"OrgEnableOauthAppRestrictionsAuditEntry\" }\n | { __typename?: \"OrgEnableSamlAuditEntry\" }\n | { __typename?: \"OrgEnableTwoFactorRequirementAuditEntry\" }\n | { __typename?: \"OrgInviteMemberAuditEntry\" }\n | { __typename?: \"OrgInviteToBusinessAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessApprovedAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessBlockedAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessDeniedAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessRequestedAuditEntry\" }\n | { __typename?: \"OrgOauthAppAccessUnblockedAuditEntry\" }\n | { __typename?: \"OrgRemoveBillingManagerAuditEntry\" }\n | { __typename?: \"OrgRemoveMemberAuditEntry\" }\n | { __typename?: \"OrgRemoveOutsideCollaboratorAuditEntry\" }\n | { __typename?: \"OrgRestoreMemberAuditEntry\" }\n | { __typename?: \"OrgUnblockUserAuditEntry\" }\n | { __typename?: \"OrgUpdateDefaultRepositoryPermissionAuditEntry\" }\n | { __typename?: \"OrgUpdateMemberAuditEntry\" }\n | { __typename?: \"OrgUpdateMemberRepositoryCreationPermissionAuditEntry\" }\n | { __typename?: \"OrgUpdateMemberRepositoryInvitationPermissionAuditEntry\" }\n | { __typename?: \"Organization\" }\n | { __typename?: \"OrganizationIdentityProvider\" }\n | { __typename?: \"OrganizationInvitation\" }\n | { __typename?: \"OrganizationMigration\" }\n | { __typename?: \"Package\" }\n | { __typename?: \"PackageFile\" }\n | { __typename?: \"PackageTag\" }\n | { __typename?: \"PackageVersion\" }\n | { __typename?: \"ParentIssueAddedEvent\" }\n | { __typename?: \"ParentIssueRemovedEvent\" }\n | { __typename?: \"PinnedDiscussion\" }\n | { __typename?: \"PinnedEnvironment\" }\n | { __typename?: \"PinnedEvent\" }\n | { __typename?: \"PinnedIssue\" }\n | { __typename?: \"PrivateRepositoryForkingDisableAuditEntry\" }\n | { __typename?: \"PrivateRepositoryForkingEnableAuditEntry\" }\n | { __typename?: \"Project\" }\n | { __typename?: \"ProjectCard\" }\n | { __typename?: \"ProjectColumn\" }\n | { __typename?: \"ProjectV2\" }\n | { __typename?: \"ProjectV2Field\" }\n | { __typename?: \"ProjectV2Item\" }\n | { __typename?: \"ProjectV2ItemFieldDateValue\" }\n | { __typename?: \"ProjectV2ItemFieldIterationValue\" }\n | { __typename?: \"ProjectV2ItemFieldNumberValue\" }\n | { __typename?: \"ProjectV2ItemFieldSingleSelectValue\" }\n | { __typename?: \"ProjectV2ItemFieldTextValue\" }\n | { __typename?: \"ProjectV2ItemStatusChangedEvent\" }\n | { __typename?: \"ProjectV2IterationField\" }\n | { __typename?: \"ProjectV2SingleSelectField\" }\n | { __typename?: \"ProjectV2StatusUpdate\" }\n | { __typename?: \"ProjectV2View\" }\n | { __typename?: \"ProjectV2Workflow\" }\n | { __typename?: \"PublicKey\" }\n | { __typename?: \"PullRequest\" }\n | { __typename?: \"PullRequestCommit\" }\n | { __typename?: \"PullRequestCommitCommentThread\" }\n | { __typename?: \"PullRequestReview\" }\n | { __typename?: \"PullRequestReviewComment\" }\n | { __typename?: \"PullRequestReviewThread\"; id: string; isResolved: boolean }\n | { __typename?: \"PullRequestThread\" }\n | { __typename?: \"Push\" }\n | { __typename?: \"PushAllowance\" }\n | { __typename?: \"Query\" }\n | { __typename?: \"Reaction\" }\n | { __typename?: \"ReadyForReviewEvent\" }\n | { __typename?: \"Ref\" }\n | { __typename?: \"ReferencedEvent\" }\n | { __typename?: \"Release\" }\n | { __typename?: \"ReleaseAsset\" }\n | { __typename?: \"RemovedFromMergeQueueEvent\" }\n | { __typename?: \"RemovedFromProjectEvent\" }\n | { __typename?: \"RemovedFromProjectV2Event\" }\n | { __typename?: \"RenamedTitleEvent\" }\n | { __typename?: \"ReopenedEvent\" }\n | { __typename?: \"RepoAccessAuditEntry\" }\n | { __typename?: \"RepoAddMemberAuditEntry\" }\n | { __typename?: \"RepoAddTopicAuditEntry\" }\n | { __typename?: \"RepoArchivedAuditEntry\" }\n | { __typename?: \"RepoChangeMergeSettingAuditEntry\" }\n | { __typename?: \"RepoConfigDisableAnonymousGitAccessAuditEntry\" }\n | { __typename?: \"RepoConfigDisableCollaboratorsOnlyAuditEntry\" }\n | { __typename?: \"RepoConfigDisableContributorsOnlyAuditEntry\" }\n | { __typename?: \"RepoConfigDisableSockpuppetDisallowedAuditEntry\" }\n | { __typename?: \"RepoConfigEnableAnonymousGitAccessAuditEntry\" }\n | { __typename?: \"RepoConfigEnableCollaboratorsOnlyAuditEntry\" }\n | { __typename?: \"RepoConfigEnableContributorsOnlyAuditEntry\" }\n | { __typename?: \"RepoConfigEnableSockpuppetDisallowedAuditEntry\" }\n | { __typename?: \"RepoConfigLockAnonymousGitAccessAuditEntry\" }\n | { __typename?: \"RepoConfigUnlockAnonymousGitAccessAuditEntry\" }\n | { __typename?: \"RepoCreateAuditEntry\" }\n | { __typename?: \"RepoDestroyAuditEntry\" }\n | { __typename?: \"RepoRemoveMemberAuditEntry\" }\n | { __typename?: \"RepoRemoveTopicAuditEntry\" }\n | { __typename?: \"Repository\" }\n | { __typename?: \"RepositoryCustomProperty\" }\n | { __typename?: \"RepositoryInvitation\" }\n | { __typename?: \"RepositoryMigration\" }\n | { __typename?: \"RepositoryRule\" }\n | { __typename?: \"RepositoryRuleset\" }\n | { __typename?: \"RepositoryRulesetBypassActor\" }\n | { __typename?: \"RepositoryTopic\" }\n | { __typename?: \"RepositoryVisibilityChangeDisableAuditEntry\" }\n | { __typename?: \"RepositoryVisibilityChangeEnableAuditEntry\" }\n | { __typename?: \"RepositoryVulnerabilityAlert\" }\n | { __typename?: \"ReviewDismissalAllowance\" }\n | { __typename?: \"ReviewDismissedEvent\" }\n | { __typename?: \"ReviewRequest\" }\n | { __typename?: \"ReviewRequestRemovedEvent\" }\n | { __typename?: \"ReviewRequestedEvent\" }\n | { __typename?: \"SavedReply\" }\n | { __typename?: \"SecurityAdvisory\" }\n | { __typename?: \"SponsorsActivity\" }\n | { __typename?: \"SponsorsListing\" }\n | { __typename?: \"SponsorsListingFeaturedItem\" }\n | { __typename?: \"SponsorsTier\" }\n | { __typename?: \"Sponsorship\" }\n | { __typename?: \"SponsorshipNewsletter\" }\n | { __typename?: \"Status\" }\n | { __typename?: \"StatusCheckRollup\" }\n | { __typename?: \"StatusContext\" }\n | { __typename?: \"SubIssueAddedEvent\" }\n | { __typename?: \"SubIssueRemovedEvent\" }\n | { __typename?: \"SubscribedEvent\" }\n | { __typename?: \"Tag\" }\n | { __typename?: \"Team\" }\n | { __typename?: \"TeamAddMemberAuditEntry\" }\n | { __typename?: \"TeamAddRepositoryAuditEntry\" }\n | { __typename?: \"TeamChangeParentTeamAuditEntry\" }\n | { __typename?: \"TeamRemoveMemberAuditEntry\" }\n | { __typename?: \"TeamRemoveRepositoryAuditEntry\" }\n | { __typename?: \"Topic\" }\n | { __typename?: \"TransferredEvent\" }\n | { __typename?: \"Tree\" }\n | { __typename?: \"UnassignedEvent\" }\n | { __typename?: \"UnlabeledEvent\" }\n | { __typename?: \"UnlockedEvent\" }\n | { __typename?: \"UnmarkedAsDuplicateEvent\" }\n | { __typename?: \"UnpinnedEvent\" }\n | { __typename?: \"UnsubscribedEvent\" }\n | { __typename?: \"User\" }\n | { __typename?: \"UserBlockedEvent\" }\n | { __typename?: \"UserContentEdit\" }\n | { __typename?: \"UserList\" }\n | { __typename?: \"UserNamespaceRepository\" }\n | { __typename?: \"UserStatus\" }\n | { __typename?: \"VerifiableDomain\" }\n | { __typename?: \"Workflow\" }\n | { __typename?: \"WorkflowRun\" }\n | { __typename?: \"WorkflowRunFile\" }\n | null\n}\n\nexport const ReviewThreadStateDocument = `\n query ReviewThreadState($threadId: ID!) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n id\n isResolved\n }\n }\n}\n `\n\nexport type SdkFunctionWrapper = <T>(\n action: (requestHeaders?: Record<string, string>) => Promise<T>,\n operationName: string,\n operationType?: string,\n variables?: any,\n) => Promise<T>\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType, _variables) =>\n action()\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n ReviewThreadState(\n variables: ReviewThreadStateQueryVariables,\n requestHeaders?: GraphQLClientRequestHeaders,\n signal?: RequestInit[\"signal\"],\n ): Promise<ReviewThreadStateQuery> {\n return withWrapper(\n (wrappedRequestHeaders) =>\n client.request<ReviewThreadStateQuery>({\n document: ReviewThreadStateDocument,\n variables,\n requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders },\n signal,\n }),\n \"ReviewThreadState\",\n \"query\",\n variables,\n )\n },\n }\n}\nexport type Sdk = ReturnType<typeof getSdk>\n","import {\n asRecord,\n assertPrCommentsListInput,\n assertReplyToReviewThreadInput,\n assertReviewThreadInput,\n} from \"../assertions.js\"\nimport { getSdk as getPrCommentReplySdk } from \"../operations/pr-comment-reply.generated.js\"\nimport { getSdk as getPrCommentResolveSdk } from \"../operations/pr-comment-resolve.generated.js\"\nimport { getSdk as getPrCommentUnresolveSdk } from \"../operations/pr-comment-unresolve.generated.js\"\nimport { getSdk as getPrCommentsListSdk } from \"../operations/pr-comments-list.generated.js\"\nimport { getSdk as getPrNodeIdSdk } from \"../operations/pr-node-id.generated.js\"\nimport {\n getSdk as getPrReviewSubmitSdk,\n type PrReviewSubmitMutationVariables,\n} from \"../operations/pr-review-submit.generated.js\"\nimport { getSdk as getReviewThreadStateSdk } from \"../operations/review-thread-state.generated.js\"\nimport type { GraphqlTransport } from \"../transport.js\"\nimport { createGraphqlRequestClient } from \"../transport.js\"\nimport type {\n DraftComment,\n PrCommentsListData,\n PrCommentsListInput,\n PrReviewSubmitData,\n PrReviewSubmitInput,\n PrReviewThreadCommentData,\n PrReviewThreadData,\n ReplyToReviewThreadData,\n ReplyToReviewThreadInput,\n ReviewThreadMutationData,\n ReviewThreadMutationInput,\n} from \"../types.js\"\n\nconst MAX_PR_REVIEW_THREAD_SCAN_PAGES = 5\n\nfunction normalizePrReviewThreadComment(comment: unknown): PrReviewThreadCommentData | null {\n const commentRecord = asRecord(comment)\n if (!commentRecord || typeof commentRecord.id !== \"string\") {\n return null\n }\n\n const author = asRecord(commentRecord.author)\n const url = commentRecord.url\n\n return {\n id: commentRecord.id,\n authorLogin: typeof author?.login === \"string\" ? author.login : null,\n body: typeof commentRecord.body === \"string\" ? commentRecord.body : \"\",\n createdAt: typeof commentRecord.createdAt === \"string\" ? commentRecord.createdAt : \"\",\n url: typeof url === \"string\" ? url : String(url ?? \"\"),\n }\n}\n\nfunction normalizePrReviewThread(thread: unknown): PrReviewThreadData | null {\n const threadRecord = asRecord(thread)\n if (!threadRecord || typeof threadRecord.id !== \"string\") {\n return null\n }\n\n const comments = asRecord(threadRecord.comments)\n const commentNodes = Array.isArray(comments?.nodes) ? comments.nodes : []\n const resolvedBy = asRecord(threadRecord.resolvedBy)\n\n return {\n id: threadRecord.id,\n path: typeof threadRecord.path === \"string\" ? threadRecord.path : null,\n line: typeof threadRecord.line === \"number\" ? threadRecord.line : null,\n startLine: typeof threadRecord.startLine === \"number\" ? threadRecord.startLine : null,\n diffSide: typeof threadRecord.diffSide === \"string\" ? threadRecord.diffSide : null,\n subjectType: typeof threadRecord.subjectType === \"string\" ? threadRecord.subjectType : null,\n isResolved: Boolean(threadRecord.isResolved),\n isOutdated: Boolean(threadRecord.isOutdated),\n viewerCanReply: Boolean(threadRecord.viewerCanReply),\n viewerCanResolve: Boolean(threadRecord.viewerCanResolve),\n viewerCanUnresolve: Boolean(threadRecord.viewerCanUnresolve),\n resolvedByLogin: typeof resolvedBy?.login === \"string\" ? resolvedBy.login : null,\n comments: commentNodes\n .map((comment) => normalizePrReviewThreadComment(comment))\n .flatMap((comment) => (comment ? [comment] : [])),\n }\n}\n\nexport async function runPrCommentsList(\n transport: GraphqlTransport,\n input: PrCommentsListInput,\n): Promise<PrCommentsListData> {\n assertPrCommentsListInput(input)\n\n const unresolvedOnly = input.unresolvedOnly ?? true\n const includeOutdated = input.includeOutdated ?? true\n\n const sdk = getPrCommentsListSdk(createGraphqlRequestClient(transport))\n\n const filteredThreads: Array<{ thread: PrReviewThreadData; cursor: string | null }> = []\n let sourceEndCursor: string | null = input.after ?? null\n let sourceHasNextPage = false\n let pagesScanned = 0\n let sourceItemsScanned = 0\n\n while (pagesScanned < MAX_PR_REVIEW_THREAD_SCAN_PAGES && filteredThreads.length < input.first) {\n const result = await sdk.PrCommentsList({\n owner: input.owner,\n name: input.name,\n prNumber: input.prNumber,\n first: input.first,\n after: sourceEndCursor,\n })\n\n const repository = asRecord(result.repository)\n const pullRequest = asRecord(repository?.pullRequest)\n const reviewThreads = asRecord(pullRequest?.reviewThreads)\n if (!reviewThreads) {\n throw new Error(\"Pull request review threads not found\")\n }\n\n const pageInfo = asRecord(reviewThreads.pageInfo)\n const threadEdges = Array.isArray(reviewThreads.edges)\n ? reviewThreads.edges\n .map((edge) => {\n const edgeRecord = asRecord(edge)\n if (!edgeRecord) {\n return null\n }\n\n return {\n cursor: typeof edgeRecord.cursor === \"string\" ? edgeRecord.cursor : null,\n node: edgeRecord.node,\n }\n })\n .flatMap((edge) => (edge ? [edge] : []))\n : []\n\n const threadNodes =\n threadEdges.length > 0\n ? threadEdges\n : Array.isArray(reviewThreads.nodes)\n ? reviewThreads.nodes.map((node) => ({ cursor: null, node }))\n : []\n\n pagesScanned += 1\n sourceItemsScanned += threadNodes.length\n\n for (const threadNode of threadNodes) {\n const normalized = normalizePrReviewThread(threadNode.node)\n if (!normalized) {\n continue\n }\n\n if (unresolvedOnly && normalized.isResolved) {\n continue\n }\n\n if (unresolvedOnly && !includeOutdated && normalized.isOutdated) {\n continue\n }\n\n filteredThreads.push({ thread: normalized, cursor: threadNode.cursor })\n }\n\n sourceHasNextPage = Boolean(pageInfo?.hasNextPage)\n sourceEndCursor = typeof pageInfo?.endCursor === \"string\" ? pageInfo.endCursor : null\n\n if (!sourceHasNextPage) {\n break\n }\n }\n\n const hasBufferedFilteredItems = filteredThreads.length > input.first\n const returnedThreads = filteredThreads.slice(0, input.first)\n const endCursor =\n returnedThreads.length > 0\n ? (returnedThreads[returnedThreads.length - 1]?.cursor ?? sourceEndCursor)\n : sourceEndCursor\n const scanTruncated = sourceHasNextPage && pagesScanned >= MAX_PR_REVIEW_THREAD_SCAN_PAGES\n\n return {\n items: returnedThreads.map((entry) => entry.thread),\n pageInfo: {\n hasNextPage: hasBufferedFilteredItems || sourceHasNextPage,\n endCursor: hasBufferedFilteredItems || sourceHasNextPage ? endCursor : null,\n },\n filterApplied: {\n unresolvedOnly,\n includeOutdated,\n },\n scan: {\n pagesScanned,\n sourceItemsScanned,\n scanTruncated,\n },\n }\n}\n\nfunction parseReviewThreadMutationResult(\n result: unknown,\n mutationKey: string,\n): ReviewThreadMutationData {\n const root = asRecord(result)\n const mutation = asRecord(root?.[mutationKey])\n const thread = asRecord(mutation?.thread)\n if (!thread || typeof thread.id !== \"string\") {\n throw new Error(\"Review thread mutation failed\")\n }\n\n return {\n id: thread.id,\n isResolved: Boolean(thread.isResolved),\n }\n}\n\nexport async function runReplyToReviewThread(\n transport: GraphqlTransport,\n input: ReplyToReviewThreadInput,\n): Promise<ReplyToReviewThreadData> {\n assertReplyToReviewThreadInput(input)\n\n const client = createGraphqlRequestClient(transport)\n const replyResult = await getPrCommentReplySdk(client).PrCommentReply({\n threadId: input.threadId,\n body: input.body,\n })\n const mutation = asRecord(replyResult.addPullRequestReviewThreadReply)\n const comment = asRecord(mutation?.comment)\n if (!comment || typeof comment.id !== \"string\") {\n throw new Error(\"Review thread mutation failed\")\n }\n\n const threadStateResult = await getReviewThreadStateSdk(client).ReviewThreadState({\n threadId: input.threadId,\n })\n const threadNode = asRecord(threadStateResult.node)\n if (!threadNode || typeof threadNode.id !== \"string\") {\n throw new Error(\"Review thread state lookup failed\")\n }\n\n return {\n id: input.threadId,\n isResolved: Boolean(threadNode.isResolved),\n commentId: comment.id,\n commentUrl: typeof comment.url === \"string\" ? comment.url : \"\",\n }\n}\n\nexport async function runResolveReviewThread(\n transport: GraphqlTransport,\n input: ReviewThreadMutationInput,\n): Promise<ReviewThreadMutationData> {\n assertReviewThreadInput(input)\n\n const result = await getPrCommentResolveSdk(\n createGraphqlRequestClient(transport),\n ).PrCommentResolve({\n threadId: input.threadId,\n })\n return parseReviewThreadMutationResult(result, \"resolveReviewThread\")\n}\n\nexport async function runUnresolveReviewThread(\n transport: GraphqlTransport,\n input: ReviewThreadMutationInput,\n): Promise<ReviewThreadMutationData> {\n assertReviewThreadInput(input)\n\n const result = await getPrCommentUnresolveSdk(\n createGraphqlRequestClient(transport),\n ).PrCommentUnresolve({\n threadId: input.threadId,\n })\n return parseReviewThreadMutationResult(result, \"unresolveReviewThread\")\n}\n\nfunction assertPrReviewSubmitInput(input: PrReviewSubmitInput): void {\n if (input.owner.trim().length === 0 || input.name.trim().length === 0) {\n throw new Error(\"Repository owner and name are required\")\n }\n if (!Number.isInteger(input.prNumber) || input.prNumber <= 0) {\n throw new Error(\"PR number must be a positive integer\")\n }\n if (!input.event || typeof input.event !== \"string\") {\n throw new Error(\"Review event is required\")\n }\n}\n\nexport async function runSubmitPrReview(\n transport: GraphqlTransport,\n input: PrReviewSubmitInput,\n): Promise<PrReviewSubmitData> {\n assertPrReviewSubmitInput(input)\n\n const client = createGraphqlRequestClient(transport)\n const prIdResult = await getPrNodeIdSdk(client).PrNodeId({\n owner: input.owner,\n name: input.name,\n prNumber: input.prNumber,\n })\n\n const pullRequestId = prIdResult.repository?.pullRequest?.id\n if (!pullRequestId) {\n throw new Error(\"Failed to retrieve pull request ID\")\n }\n\n const threads = input.comments\n ? input.comments.map((comment: DraftComment) => ({\n path: comment.path,\n body: comment.body,\n line: comment.line,\n ...(comment.side ? { side: comment.side } : {}),\n ...(comment.startLine ? { startLine: comment.startLine } : {}),\n ...(comment.startSide ? { startSide: comment.startSide } : {}),\n }))\n : []\n\n const result = await getPrReviewSubmitSdk(client).PrReviewSubmit({\n pullRequestId,\n event: input.event as PrReviewSubmitMutationVariables[\"event\"],\n ...(input.body === undefined ? {} : { body: input.body }),\n ...(threads.length === 0 ? {} : { threads }),\n })\n\n const review = asRecord(asRecord(result.addPullRequestReview)?.pullRequestReview)\n if (!review || typeof review.id !== \"string\") {\n throw new Error(\"Failed to parse pull request review response\")\n }\n\n return {\n id: review.id,\n state: typeof review.state === \"string\" ? review.state : \"\",\n url: typeof review.url === \"string\" ? review.url : \"\",\n body: typeof review.body === \"string\" ? review.body : null,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA+DO,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0ChC,yBAAyB;AAS/B,IAAM,iBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAClF,OAAO;AAEF,SAASA,QAAO,QAAuB,cAAkC,gBAAgB;AAC9F,SAAO;AAAA,IACL,eACE,WACA,gBACA,QAC8B;AAC9B,aAAO;AAAA,QACL,CAAC,0BACC,OAAO,QAA6B;AAAA,UAClC,UAAU;AAAA,UACV;AAAA,UACA,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB;AAAA,UAC9D;AAAA,QACF,CAAC;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACwIO,IAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBzC,IAAMC,kBAAqC,CAAC,QAAQ,gBAAgB,gBAAgB,eAClF,OAAO;AAEF,SAASC,QAAO,QAAuB,cAAkCD,iBAAgB;AAC9F,SAAO;AAAA,IACL,kBACE,WACA,gBACA,QACiC;AACjC,aAAO;AAAA,QACL,CAAC,0BACC,OAAO,QAAgC;AAAA,UACrC,UAAU;AAAA,UACV;AAAA,UACA,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,sBAAsB;AAAA,UAC9D;AAAA,QACF,CAAC;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC5RA,IAAM,kCAAkC;AAExC,SAAS,+BAA+B,SAAoD;AAC1F,QAAM,gBAAgB,SAAS,OAAO;AACtC,MAAI,CAAC,iBAAiB,OAAO,cAAc,OAAO,UAAU;AAC1D,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,QAAM,MAAM,cAAc;AAE1B,SAAO;AAAA,IACL,IAAI,cAAc;AAAA,IAClB,aAAa,OAAO,QAAQ,UAAU,WAAW,OAAO,QAAQ;AAAA,IAChE,MAAM,OAAO,cAAc,SAAS,WAAW,cAAc,OAAO;AAAA,IACpE,WAAW,OAAO,cAAc,cAAc,WAAW,cAAc,YAAY;AAAA,IACnF,KAAK,OAAO,QAAQ,WAAW,MAAM,OAAO,OAAO,EAAE;AAAA,EACvD;AACF;AAEA,SAAS,wBAAwB,QAA4C;AAC3E,QAAM,eAAe,SAAS,MAAM;AACpC,MAAI,CAAC,gBAAgB,OAAO,aAAa,OAAO,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,SAAS,aAAa,QAAQ;AAC/C,QAAM,eAAe,MAAM,QAAQ,UAAU,KAAK,IAAI,SAAS,QAAQ,CAAC;AACxE,QAAM,aAAa,SAAS,aAAa,UAAU;AAEnD,SAAO;AAAA,IACL,IAAI,aAAa;AAAA,IACjB,MAAM,OAAO,aAAa,SAAS,WAAW,aAAa,OAAO;AAAA,IAClE,MAAM,OAAO,aAAa,SAAS,WAAW,aAAa,OAAO;AAAA,IAClE,WAAW,OAAO,aAAa,cAAc,WAAW,aAAa,YAAY;AAAA,IACjF,UAAU,OAAO,aAAa,aAAa,WAAW,aAAa,WAAW;AAAA,IAC9E,aAAa,OAAO,aAAa,gBAAgB,WAAW,aAAa,cAAc;AAAA,IACvF,YAAY,QAAQ,aAAa,UAAU;AAAA,IAC3C,YAAY,QAAQ,aAAa,UAAU;AAAA,IAC3C,gBAAgB,QAAQ,aAAa,cAAc;AAAA,IACnD,kBAAkB,QAAQ,aAAa,gBAAgB;AAAA,IACvD,oBAAoB,QAAQ,aAAa,kBAAkB;AAAA,IAC3D,iBAAiB,OAAO,YAAY,UAAU,WAAW,WAAW,QAAQ;AAAA,IAC5E,UAAU,aACP,IAAI,CAAC,YAAY,+BAA+B,OAAO,CAAC,EACxD,QAAQ,CAAC,YAAa,UAAU,CAAC,OAAO,IAAI,CAAC,CAAE;AAAA,EACpD;AACF;AAEA,eAAsB,kBACpB,WACA,OAC6B;AAC7B,4BAA0B,KAAK;AAE/B,QAAM,iBAAiB,MAAM,kBAAkB;AAC/C,QAAM,kBAAkB,MAAM,mBAAmB;AAEjD,QAAM,MAAME,QAAqB,2BAA2B,SAAS,CAAC;AAEtE,QAAM,kBAAgF,CAAC;AACvF,MAAI,kBAAiC,MAAM,SAAS;AACpD,MAAI,oBAAoB;AACxB,MAAI,eAAe;AACnB,MAAI,qBAAqB;AAEzB,SAAO,eAAe,mCAAmC,gBAAgB,SAAS,MAAM,OAAO;AAC7F,UAAM,SAAS,MAAM,IAAI,eAAe;AAAA,MACtC,OAAO,MAAM;AAAA,MACb,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM;AAAA,MAChB,OAAO,MAAM;AAAA,MACb,OAAO;AAAA,IACT,CAAC;AAED,UAAM,aAAa,SAAS,OAAO,UAAU;AAC7C,UAAM,cAAc,SAAS,YAAY,WAAW;AACpD,UAAM,gBAAgB,SAAS,aAAa,aAAa;AACzD,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,UAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,UAAM,cAAc,MAAM,QAAQ,cAAc,KAAK,IACjD,cAAc,MACX,IAAI,CAAC,SAAS;AACb,YAAM,aAAa,SAAS,IAAI;AAChC,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL,QAAQ,OAAO,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,QACpE,MAAM,WAAW;AAAA,MACnB;AAAA,IACF,CAAC,EACA,QAAQ,CAAC,SAAU,OAAO,CAAC,IAAI,IAAI,CAAC,CAAE,IACzC,CAAC;AAEL,UAAM,cACJ,YAAY,SAAS,IACjB,cACA,MAAM,QAAQ,cAAc,KAAK,IAC/B,cAAc,MAAM,IAAI,CAAC,UAAU,EAAE,QAAQ,MAAM,KAAK,EAAE,IAC1D,CAAC;AAET,oBAAgB;AAChB,0BAAsB,YAAY;AAElC,eAAW,cAAc,aAAa;AACpC,YAAM,aAAa,wBAAwB,WAAW,IAAI;AAC1D,UAAI,CAAC,YAAY;AACf;AAAA,MACF;AAEA,UAAI,kBAAkB,WAAW,YAAY;AAC3C;AAAA,MACF;AAEA,UAAI,kBAAkB,CAAC,mBAAmB,WAAW,YAAY;AAC/D;AAAA,MACF;AAEA,sBAAgB,KAAK,EAAE,QAAQ,YAAY,QAAQ,WAAW,OAAO,CAAC;AAAA,IACxE;AAEA,wBAAoB,QAAQ,UAAU,WAAW;AACjD,sBAAkB,OAAO,UAAU,cAAc,WAAW,SAAS,YAAY;AAEjF,QAAI,CAAC,mBAAmB;AACtB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,2BAA2B,gBAAgB,SAAS,MAAM;AAChE,QAAM,kBAAkB,gBAAgB,MAAM,GAAG,MAAM,KAAK;AAC5D,QAAM,YACJ,gBAAgB,SAAS,IACpB,gBAAgB,gBAAgB,SAAS,CAAC,GAAG,UAAU,kBACxD;AACN,QAAM,gBAAgB,qBAAqB,gBAAgB;AAE3D,SAAO;AAAA,IACL,OAAO,gBAAgB,IAAI,CAAC,UAAU,MAAM,MAAM;AAAA,IAClD,UAAU;AAAA,MACR,aAAa,4BAA4B;AAAA,MACzC,WAAW,4BAA4B,oBAAoB,YAAY;AAAA,IACzE;AAAA,IACA,eAAe;AAAA,MACb;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,gCACP,QACA,aAC0B;AAC1B,QAAM,OAAO,SAAS,MAAM;AAC5B,QAAM,WAAW,SAAS,OAAO,WAAW,CAAC;AAC7C,QAAM,SAAS,SAAS,UAAU,MAAM;AACxC,MAAI,CAAC,UAAU,OAAO,OAAO,OAAO,UAAU;AAC5C,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AAEA,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,YAAY,QAAQ,OAAO,UAAU;AAAA,EACvC;AACF;AAEA,eAAsB,uBACpB,WACA,OACkC;AAClC,iCAA+B,KAAK;AAEpC,QAAM,SAAS,2BAA2B,SAAS;AACnD,QAAM,cAAc,MAAM,OAAqB,MAAM,EAAE,eAAe;AAAA,IACpE,UAAU,MAAM;AAAA,IAChB,MAAM,MAAM;AAAA,EACd,CAAC;AACD,QAAM,WAAW,SAAS,YAAY,+BAA+B;AACrE,QAAM,UAAU,SAAS,UAAU,OAAO;AAC1C,MAAI,CAAC,WAAW,OAAO,QAAQ,OAAO,UAAU;AAC9C,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AAEA,QAAM,oBAAoB,MAAMA,QAAwB,MAAM,EAAE,kBAAkB;AAAA,IAChF,UAAU,MAAM;AAAA,EAClB,CAAC;AACD,QAAM,aAAa,SAAS,kBAAkB,IAAI;AAClD,MAAI,CAAC,cAAc,OAAO,WAAW,OAAO,UAAU;AACpD,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAEA,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,YAAY,QAAQ,WAAW,UAAU;AAAA,IACzC,WAAW,QAAQ;AAAA,IACnB,YAAY,OAAO,QAAQ,QAAQ,WAAW,QAAQ,MAAM;AAAA,EAC9D;AACF;AAEA,eAAsB,uBACpB,WACA,OACmC;AACnC,0BAAwB,KAAK;AAE7B,QAAM,SAAS,MAAMA;AAAA,IACnB,2BAA2B,SAAS;AAAA,EACtC,EAAE,iBAAiB;AAAA,IACjB,UAAU,MAAM;AAAA,EAClB,CAAC;AACD,SAAO,gCAAgC,QAAQ,qBAAqB;AACtE;AAEA,eAAsB,yBACpB,WACA,OACmC;AACnC,0BAAwB,KAAK;AAE7B,QAAM,SAAS,MAAMA;AAAA,IACnB,2BAA2B,SAAS;AAAA,EACtC,EAAE,mBAAmB;AAAA,IACnB,UAAU,MAAM;AAAA,EAClB,CAAC;AACD,SAAO,gCAAgC,QAAQ,uBAAuB;AACxE;AAEA,SAAS,0BAA0B,OAAkC;AACnE,MAAI,MAAM,MAAM,KAAK,EAAE,WAAW,KAAK,MAAM,KAAK,KAAK,EAAE,WAAW,GAAG;AACrE,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,MAAI,CAAC,OAAO,UAAU,MAAM,QAAQ,KAAK,MAAM,YAAY,GAAG;AAC5D,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,MAAI,CAAC,MAAM,SAAS,OAAO,MAAM,UAAU,UAAU;AACnD,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AACF;AAEA,eAAsB,kBACpB,WACA,OAC6B;AAC7B,4BAA0B,KAAK;AAE/B,QAAM,SAAS,2BAA2B,SAAS;AACnD,QAAM,aAAa,MAAMA,QAAe,MAAM,EAAE,SAAS;AAAA,IACvD,OAAO,MAAM;AAAA,IACb,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,EAClB,CAAC;AAED,QAAM,gBAAgB,WAAW,YAAY,aAAa;AAC1D,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAEA,QAAM,UAAU,MAAM,WAClB,MAAM,SAAS,IAAI,CAAC,aAA2B;AAAA,IAC7C,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,IAC7C,GAAI,QAAQ,YAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,IAC5D,GAAI,QAAQ,YAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,EAC9D,EAAE,IACF,CAAC;AAEL,QAAM,SAAS,MAAMA,QAAqB,MAAM,EAAE,eAAe;AAAA,IAC/D;AAAA,IACA,OAAO,MAAM;AAAA,IACb,GAAI,MAAM,SAAS,SAAY,CAAC,IAAI,EAAE,MAAM,MAAM,KAAK;AAAA,IACvD,GAAI,QAAQ,WAAW,IAAI,CAAC,IAAI,EAAE,QAAQ;AAAA,EAC5C,CAAC;AAED,QAAM,SAAS,SAAS,SAAS,OAAO,oBAAoB,GAAG,iBAAiB;AAChF,MAAI,CAAC,UAAU,OAAO,OAAO,OAAO,UAAU;AAC5C,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AAEA,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,OAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,IACzD,KAAK,OAAO,OAAO,QAAQ,WAAW,OAAO,MAAM;AAAA,IACnD,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,EACxD;AACF;","names":["getSdk","defaultWrapper","getSdk","getSdk"]}