@opentabs-dev/opentabs-plugin-github 0.0.76 → 0.0.77

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 (142) hide show
  1. package/README.md +75 -129
  2. package/dist/adapter.iife.js +1149 -663
  3. package/dist/adapter.iife.js.map +4 -4
  4. package/dist/github-api.d.ts +16 -10
  5. package/dist/github-api.d.ts.map +1 -1
  6. package/dist/github-api.js +314 -112
  7. package/dist/github-api.js.map +1 -1
  8. package/dist/tools/add-reaction.d.ts +5 -9
  9. package/dist/tools/add-reaction.d.ts.map +1 -1
  10. package/dist/tools/add-reaction.js +29 -31
  11. package/dist/tools/add-reaction.js.map +1 -1
  12. package/dist/tools/compare-commits.d.ts +2 -8
  13. package/dist/tools/compare-commits.d.ts.map +1 -1
  14. package/dist/tools/compare-commits.js +32 -34
  15. package/dist/tools/compare-commits.js.map +1 -1
  16. package/dist/tools/create-comment.d.ts +1 -8
  17. package/dist/tools/create-comment.d.ts.map +1 -1
  18. package/dist/tools/create-comment.js +21 -5
  19. package/dist/tools/create-comment.js.map +1 -1
  20. package/dist/tools/create-issue.d.ts +0 -2
  21. package/dist/tools/create-issue.d.ts.map +1 -1
  22. package/dist/tools/create-issue.js +32 -15
  23. package/dist/tools/create-issue.js.map +1 -1
  24. package/dist/tools/create-label.d.ts.map +1 -1
  25. package/dist/tools/create-label.js +20 -12
  26. package/dist/tools/create-label.js.map +1 -1
  27. package/dist/tools/create-or-update-file.d.ts +1 -4
  28. package/dist/tools/create-or-update-file.d.ts.map +1 -1
  29. package/dist/tools/create-or-update-file.js +23 -23
  30. package/dist/tools/create-or-update-file.js.map +1 -1
  31. package/dist/tools/create-pull-request.d.ts.map +1 -1
  32. package/dist/tools/create-pull-request.js +37 -16
  33. package/dist/tools/create-pull-request.js.map +1 -1
  34. package/dist/tools/create-release.d.ts.map +1 -1
  35. package/dist/tools/create-release.js +29 -19
  36. package/dist/tools/create-release.js.map +1 -1
  37. package/dist/tools/create-repo.d.ts.map +1 -1
  38. package/dist/tools/create-repo.js +33 -18
  39. package/dist/tools/create-repo.js.map +1 -1
  40. package/dist/tools/delete-file.d.ts +1 -6
  41. package/dist/tools/delete-file.d.ts.map +1 -1
  42. package/dist/tools/delete-file.js +8 -25
  43. package/dist/tools/delete-file.js.map +1 -1
  44. package/dist/tools/get-file-content.d.ts.map +1 -1
  45. package/dist/tools/get-file-content.js +5 -9
  46. package/dist/tools/get-file-content.js.map +1 -1
  47. package/dist/tools/get-issue.d.ts.map +1 -1
  48. package/dist/tools/get-issue.js +25 -4
  49. package/dist/tools/get-issue.js.map +1 -1
  50. package/dist/tools/get-pull-request-diff.d.ts.map +1 -1
  51. package/dist/tools/get-pull-request-diff.js +19 -5
  52. package/dist/tools/get-pull-request-diff.js.map +1 -1
  53. package/dist/tools/get-pull-request.d.ts.map +1 -1
  54. package/dist/tools/get-pull-request.js +32 -3
  55. package/dist/tools/get-pull-request.js.map +1 -1
  56. package/dist/tools/get-repo.d.ts.map +1 -1
  57. package/dist/tools/get-repo.js +21 -4
  58. package/dist/tools/get-repo.js.map +1 -1
  59. package/dist/tools/get-user-profile.d.ts.map +1 -1
  60. package/dist/tools/get-user-profile.js +15 -2
  61. package/dist/tools/get-user-profile.js.map +1 -1
  62. package/dist/tools/get-workflow-run.d.ts.map +1 -1
  63. package/dist/tools/get-workflow-run.js +28 -5
  64. package/dist/tools/get-workflow-run.js.map +1 -1
  65. package/dist/tools/list-branches.d.ts +0 -2
  66. package/dist/tools/list-branches.d.ts.map +1 -1
  67. package/dist/tools/list-branches.js +3 -9
  68. package/dist/tools/list-branches.js.map +1 -1
  69. package/dist/tools/list-comments.d.ts +0 -2
  70. package/dist/tools/list-comments.d.ts.map +1 -1
  71. package/dist/tools/list-comments.js +33 -10
  72. package/dist/tools/list-comments.js.map +1 -1
  73. package/dist/tools/list-commits.d.ts +0 -2
  74. package/dist/tools/list-commits.d.ts.map +1 -1
  75. package/dist/tools/list-commits.js +8 -13
  76. package/dist/tools/list-commits.js.map +1 -1
  77. package/dist/tools/list-issues.d.ts +2 -2
  78. package/dist/tools/list-issues.d.ts.map +1 -1
  79. package/dist/tools/list-issues.js +43 -16
  80. package/dist/tools/list-issues.js.map +1 -1
  81. package/dist/tools/list-labels.d.ts +0 -2
  82. package/dist/tools/list-labels.d.ts.map +1 -1
  83. package/dist/tools/list-labels.js +18 -10
  84. package/dist/tools/list-labels.js.map +1 -1
  85. package/dist/tools/list-notifications.d.ts +1 -6
  86. package/dist/tools/list-notifications.d.ts.map +1 -1
  87. package/dist/tools/list-notifications.js +30 -23
  88. package/dist/tools/list-notifications.js.map +1 -1
  89. package/dist/tools/list-org-members.d.ts +0 -3
  90. package/dist/tools/list-org-members.d.ts.map +1 -1
  91. package/dist/tools/list-org-members.js +24 -18
  92. package/dist/tools/list-org-members.js.map +1 -1
  93. package/dist/tools/list-pull-request-files.d.ts +0 -3
  94. package/dist/tools/list-pull-request-files.d.ts.map +1 -1
  95. package/dist/tools/list-pull-request-files.js +6 -28
  96. package/dist/tools/list-pull-request-files.js.map +1 -1
  97. package/dist/tools/list-pull-requests.d.ts +2 -4
  98. package/dist/tools/list-pull-requests.d.ts.map +1 -1
  99. package/dist/tools/list-pull-requests.js +34 -18
  100. package/dist/tools/list-pull-requests.js.map +1 -1
  101. package/dist/tools/list-releases.d.ts +0 -2
  102. package/dist/tools/list-releases.d.ts.map +1 -1
  103. package/dist/tools/list-releases.js +37 -10
  104. package/dist/tools/list-releases.js.map +1 -1
  105. package/dist/tools/list-repos.d.ts +0 -7
  106. package/dist/tools/list-repos.d.ts.map +1 -1
  107. package/dist/tools/list-repos.js +18 -23
  108. package/dist/tools/list-repos.js.map +1 -1
  109. package/dist/tools/list-workflow-runs.d.ts +0 -21
  110. package/dist/tools/list-workflow-runs.d.ts.map +1 -1
  111. package/dist/tools/list-workflow-runs.js +32 -43
  112. package/dist/tools/list-workflow-runs.js.map +1 -1
  113. package/dist/tools/merge-pull-request.d.ts +1 -3
  114. package/dist/tools/merge-pull-request.d.ts.map +1 -1
  115. package/dist/tools/merge-pull-request.js +11 -15
  116. package/dist/tools/merge-pull-request.js.map +1 -1
  117. package/dist/tools/request-pull-request-review.d.ts +1 -21
  118. package/dist/tools/request-pull-request-review.d.ts.map +1 -1
  119. package/dist/tools/request-pull-request-review.js +17 -10
  120. package/dist/tools/request-pull-request-review.js.map +1 -1
  121. package/dist/tools/schemas.d.ts +130 -38
  122. package/dist/tools/schemas.d.ts.map +1 -1
  123. package/dist/tools/schemas.js +140 -52
  124. package/dist/tools/schemas.js.map +1 -1
  125. package/dist/tools/search-issues.d.ts +0 -13
  126. package/dist/tools/search-issues.d.ts.map +1 -1
  127. package/dist/tools/search-issues.js +23 -17
  128. package/dist/tools/search-issues.js.map +1 -1
  129. package/dist/tools/search-repos.d.ts +0 -10
  130. package/dist/tools/search-repos.d.ts.map +1 -1
  131. package/dist/tools/search-repos.js +7 -12
  132. package/dist/tools/search-repos.js.map +1 -1
  133. package/dist/tools/update-issue.d.ts +2 -18
  134. package/dist/tools/update-issue.d.ts.map +1 -1
  135. package/dist/tools/update-issue.js +19 -16
  136. package/dist/tools/update-issue.js.map +1 -1
  137. package/dist/tools/update-pull-request.d.ts +2 -24
  138. package/dist/tools/update-pull-request.d.ts.map +1 -1
  139. package/dist/tools/update-pull-request.js +28 -20
  140. package/dist/tools/update-pull-request.js.map +1 -1
  141. package/dist/tools.json +70 -747
  142. package/package.json +10 -4
@@ -1,15 +1,21 @@
1
1
  export declare const isAuthenticated: () => boolean;
2
2
  export declare const waitForAuth: () => Promise<boolean>;
3
3
  export declare const getLogin: () => string;
4
- export declare const api: <T>(endpoint: string, options?: {
5
- method?: string;
6
- body?: Record<string, unknown>;
7
- query?: Record<string, string | number | boolean | undefined>;
8
- accept?: string;
4
+ export declare const pageJson: <T>(path: string, query?: Record<string, string | number | boolean | undefined>) => Promise<T>;
5
+ export declare const turboData: <T>(path: string, query?: Record<string, string | number | boolean | undefined>) => Promise<{
6
+ data: T;
7
+ queryId?: string;
8
+ queryName?: string;
9
+ }>;
10
+ export declare const discoverMutationIds: () => Promise<void>;
11
+ export declare const getMutationId: (mutationName: string) => Promise<string>;
12
+ export declare const discoverQueryId: (queryName: string, discoveryPath: string, discoveryQuery?: Record<string, string | number | boolean | undefined>) => Promise<string>;
13
+ export declare const graphql: <T>(queryId: string, variables: Record<string, unknown>) => Promise<T>;
14
+ export declare const pageEmbeddedData: <T>(path: string) => Promise<T>;
15
+ export declare const formPost: <T>(formPagePath: string, postPath: string, body: Record<string, unknown>, options?: {
16
+ csrfSelector?: string;
9
17
  }) => Promise<T>;
10
- export declare const apiRaw: (endpoint: string, options?: {
11
- method?: string;
12
- query?: Record<string, string | number | boolean | undefined>;
13
- accept?: string;
14
- }) => Promise<string>;
18
+ export declare const submitPageForm: <T>(pagePath: string, formSelector: string, fields: Record<string, string>) => Promise<T>;
19
+ export declare const submitDirectForm: <T>(action: string, fields: Record<string, string>, csrfToken: string) => Promise<T>;
20
+ export declare const fetchRawText: (path: string) => Promise<string>;
15
21
  //# sourceMappingURL=github-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-api.d.ts","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,eAAe,QAAO,OAA6B,CAAC;AAEjE,eAAO,MAAM,WAAW,QAAO,OAAO,CAAC,OAAO,CAI3C,CAAC;AAEJ,eAAO,MAAM,QAAQ,QAAO,MAI3B,CAAC;AAIF,eAAO,MAAM,GAAG,GAAU,CAAC,EACzB,UAAU,MAAM,EAChB,UAAS;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,KACL,OAAO,CAAC,CAAC,CAkEX,CAAC;AAGF,eAAO,MAAM,MAAM,GACjB,UAAU,MAAM,EAChB,UAAS;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,KACL,OAAO,CAAC,MAAM,CAkDhB,CAAC"}
1
+ {"version":3,"file":"github-api.d.ts","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,eAAe,QAAO,OAA6B,CAAC;AAEjE,eAAO,MAAM,WAAW,QAAO,OAAO,CAAC,OAAO,CAI3C,CAAC;AAEJ,eAAO,MAAM,QAAQ,QAAO,MAI3B,CAAC;AA2DF,eAAO,MAAM,QAAQ,GAAU,CAAC,EAC9B,MAAM,MAAM,EACZ,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,KAC5D,OAAO,CAAC,CAAC,CAeX,CAAC;AAcF,eAAO,MAAM,SAAS,GAAU,CAAC,EAC/B,MAAM,MAAM,EACZ,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,KAC5D,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAqC3D,CAAC;AAYF,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,IAAI,CAiCxD,CAAC;AAGF,eAAO,MAAM,aAAa,GAAU,cAAc,MAAM,KAAG,OAAO,CAAC,MAAM,CASxE,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,iBAAiB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,KACrE,OAAO,CAAC,MAAM,CAYhB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,CAAC,EAAE,SAAS,MAAM,EAAE,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,CAAC,CAmC/F,CAAC;AAMF,eAAO,MAAM,gBAAgB,GAAU,CAAC,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,CAAC,CAejE,CAAC;AAMF,eAAO,MAAM,QAAQ,GAAU,CAAC,EAC9B,cAAc,MAAM,EACpB,UAAU,MAAM,EAChB,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,KAClC,OAAO,CAAC,CAAC,CA2CX,CAAC;AAOF,eAAO,MAAM,cAAc,GAAU,CAAC,EACpC,UAAU,MAAM,EAChB,cAAc,MAAM,EACpB,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC7B,OAAO,CAAC,CAAC,CAiCX,CAAC;AAIF,eAAO,MAAM,gBAAgB,GAAU,CAAC,EACtC,QAAQ,MAAM,EACd,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,WAAW,MAAM,KAChB,OAAO,CAAC,CAAC,CAUX,CAAC;AAyCF,eAAO,MAAM,YAAY,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,MAAM,CAG/D,CAAC"}
@@ -1,10 +1,4 @@
1
- import { ToolError, getMetaContent, parseRetryAfterMs, waitUntil } from '@opentabs-dev/plugin-sdk';
2
- const API_BASE = 'https://api.github.com';
3
- // --- Auth detection ---
4
- // GitHub uses HttpOnly session cookies (not accessible via document.cookie).
5
- // Auth is detected via the <meta name="user-login"> tag that GitHub injects
6
- // on every page for logged-in users. The actual API auth uses the session
7
- // cookies sent automatically via credentials: 'include'.
1
+ import { ToolError, buildQueryString, fetchFromPage, fetchText, getMetaContent, waitUntil, } from '@opentabs-dev/plugin-sdk';
8
2
  const getAuth = () => {
9
3
  const login = getMetaContent('user-login');
10
4
  if (!login)
@@ -19,127 +13,335 @@ export const getLogin = () => {
19
13
  throw ToolError.auth('Not authenticated — please log in to GitHub.');
20
14
  return auth.login;
21
15
  };
22
- // --- API caller ---
23
- export const api = async (endpoint, options = {}) => {
24
- if (!getAuth())
25
- throw ToolError.auth('Not authenticated please log in to GitHub.');
26
- let url = `${API_BASE}${endpoint}`;
27
- if (options.query) {
28
- const params = new URLSearchParams();
29
- for (const [key, value] of Object.entries(options.query)) {
30
- if (value !== undefined)
31
- params.append(key, String(value));
32
- }
33
- const qs = params.toString();
34
- if (qs)
35
- url += `?${qs}`;
36
- }
37
- const headers = {
38
- Accept: options.accept ?? 'application/vnd.github+json',
39
- 'X-GitHub-Api-Version': '2022-11-28',
40
- };
41
- let fetchBody;
42
- if (options.body) {
43
- headers['Content-Type'] = 'application/json';
44
- fetchBody = JSON.stringify(options.body);
16
+ // --- CSRF token ---
17
+ // GitHub requires a CSRF token for /_graphql and form POST mutations.
18
+ // Tokens are form-specific and found in input[name="authenticity_token"] elements.
19
+ const getCsrfToken = () => {
20
+ // Prefer graphql-specific form token, fall back to any authenticity_token
21
+ const graphqlInput = document.querySelector('form[action*="graphql"] input[name="authenticity_token"]');
22
+ if (graphqlInput?.value)
23
+ return graphqlInput.value;
24
+ const anyInput = document.querySelector('input[name="authenticity_token"]');
25
+ return anyInput?.value ?? null;
26
+ };
27
+ const requireCsrf = () => {
28
+ const token = getCsrfToken();
29
+ if (!token)
30
+ throw ToolError.auth('CSRF token not found — refresh the GitHub page.');
31
+ return token;
32
+ };
33
+ // --- Error classification ---
34
+ const classifyError = async (response, context) => {
35
+ const body = (await response.text().catch(() => '')).substring(0, 512);
36
+ const status = response.status;
37
+ if (status === 429) {
38
+ const retry = response.headers.get('Retry-After');
39
+ const ms = retry ? Number.parseInt(retry, 10) * 1000 || undefined : undefined;
40
+ throw ToolError.rateLimited(`Rate limited: ${context} — ${body}`, ms);
45
41
  }
46
- // GitHub's REST API supports CORS with Access-Control-Allow-Origin: *
47
- // which is incompatible with credentials: 'include'. Use the user's
48
- // GitHub session cookie indirectly by extracting a CSRF token for
49
- // write operations. For read operations, unauthenticated access works
50
- // with standard rate limits. For authenticated requests, pass the
51
- // GitHub session cookie via a same-origin proxy or use the page's
52
- // embedded token.
53
- let response;
42
+ if (status === 401 || status === 403)
43
+ throw ToolError.auth(`Auth error (${status}): ${context} ${body}`);
44
+ if (status === 404)
45
+ throw ToolError.notFound(`Not found: ${context} ${body}`);
46
+ if (status === 422)
47
+ throw ToolError.validation(`Validation error: ${context} ${body}`);
48
+ throw ToolError.internal(`API error (${status}): ${context} — ${body}`);
49
+ };
50
+ const doFetch = async (url, init) => {
54
51
  try {
55
- response = await fetch(url, {
56
- method: options.method ?? 'GET',
57
- headers,
58
- body: fetchBody,
59
- signal: AbortSignal.timeout(30_000),
60
- });
52
+ return await fetchFromPage(url, init);
61
53
  }
62
54
  catch (err) {
55
+ if (err instanceof ToolError)
56
+ throw err;
63
57
  if (err instanceof DOMException && err.name === 'TimeoutError')
64
- throw ToolError.timeout(`API request timed out: ${endpoint}`);
65
- if (err instanceof DOMException && err.name === 'AbortError')
66
- throw new ToolError('Request was aborted', 'aborted');
67
- throw new ToolError(`Network error: ${err instanceof Error ? err.message : String(err)}`, 'network_error', {
68
- category: 'internal',
69
- retryable: true,
70
- });
58
+ throw ToolError.timeout(`Request timed out: ${url}`);
59
+ throw ToolError.internal(`Network error: ${err instanceof Error ? err.message : String(err)}`);
60
+ }
61
+ };
62
+ export const pageJson = async (path, query) => {
63
+ if (!getAuth())
64
+ throw ToolError.auth('Not authenticated — please log in to GitHub.');
65
+ const qs = query ? buildQueryString(query) : '';
66
+ const url = qs ? `${path}?${qs}` : path;
67
+ const response = await doFetch(url, {
68
+ method: 'GET',
69
+ headers: { Accept: 'application/json' },
70
+ });
71
+ if (!response.ok)
72
+ return classifyError(response, path);
73
+ const data = (await response.json());
74
+ return (data.payload ?? data);
75
+ };
76
+ export const turboData = async (path, query) => {
77
+ if (!getAuth())
78
+ throw ToolError.auth('Not authenticated — please log in to GitHub.');
79
+ const qs = query ? buildQueryString(query) : '';
80
+ const url = qs ? `${path}?${qs}` : path;
81
+ const html = await fetchText(url, {
82
+ headers: {
83
+ Accept: 'text/html',
84
+ 'Turbo-Frame': 'repo-content-turbo-frame',
85
+ },
86
+ });
87
+ // Extract embedded React app data
88
+ const match = html.match(/<script[^>]*data-target="react-app\.embeddedData"[^>]*>([\s\S]*?)<\/script>/);
89
+ if (!match?.[1])
90
+ throw ToolError.internal(`No embedded data found in ${path}`);
91
+ const embedded = JSON.parse(match[1]);
92
+ const preloaded = embedded.payload?.preloadedQueries;
93
+ if (preloaded) {
94
+ const first = Object.values(preloaded)[0];
95
+ if (first?.result?.data) {
96
+ return {
97
+ data: first.result.data,
98
+ queryId: first.queryId,
99
+ queryName: first.queryName,
100
+ };
101
+ }
71
102
  }
72
- if (!response.ok) {
73
- const errorBody = (await response.text().catch(() => '')).substring(0, 512);
74
- if (response.status === 429) {
75
- const retryAfter = response.headers.get('Retry-After');
76
- const retryMs = retryAfter !== null ? parseRetryAfterMs(retryAfter) : undefined;
77
- throw ToolError.rateLimited(`Rate limited: ${endpoint} ${errorBody}`, retryMs);
103
+ return { data: (embedded.payload ?? embedded) };
104
+ };
105
+ // --- Transport: /_graphql persisted queries ---
106
+ // GitHub's internal GraphQL endpoint accepts persisted query hashes.
107
+ // Query IDs are discovered at runtime from embedded page data.
108
+ // Cache of queryName queryId mappings discovered from pages and JS bundles
109
+ const queryIdCache = new Map();
110
+ // Discover mutation query IDs from GitHub's JS bundles.
111
+ // Mutations are compiled as Relay operations with format:
112
+ // name:"XMutation",operationKind:"mutation" preceded by id:"hexhash"
113
+ export const discoverMutationIds = async () => {
114
+ if (queryIdCache.has('__mutations_discovered__'))
115
+ return;
116
+ const html = await fetchText(window.location.href, {
117
+ headers: { Accept: 'text/html', 'X-Requested-With': 'XMLHttpRequest' },
118
+ });
119
+ const jsUrls = [];
120
+ for (const m of html.matchAll(/src="(https:\/\/github\.githubassets\.com\/assets\/[^"]+\.js)"/g)) {
121
+ if (m[1])
122
+ jsUrls.push(m[1]);
123
+ }
124
+ for (const url of jsUrls) {
125
+ try {
126
+ const response = await fetchFromPage(url, { credentials: 'omit' });
127
+ const code = await response.text();
128
+ if (!code.includes('operationKind:"mutation"'))
129
+ continue;
130
+ const pattern = /name:"([^"]*)",operationKind:"mutation"/g;
131
+ for (const match of code.matchAll(pattern)) {
132
+ const name = match[1] ?? '';
133
+ const before = code.substring(Math.max(0, match.index - 300), match.index);
134
+ const idMatch = before.match(/id:"([a-f0-9]{32,64})"/);
135
+ if (idMatch?.[1]) {
136
+ queryIdCache.set(name, idMatch[1]);
137
+ }
138
+ }
139
+ }
140
+ catch {
141
+ // Skip bundles that fail to load
78
142
  }
79
- if (response.status === 401 || response.status === 403)
80
- throw ToolError.auth(`Auth error (${response.status}): ${errorBody}`);
81
- if (response.status === 404)
82
- throw ToolError.notFound(`Not found: ${endpoint} — ${errorBody}`);
83
- if (response.status === 422)
84
- throw ToolError.validation(`Validation error: ${endpoint} — ${errorBody}`);
85
- throw ToolError.internal(`API error (${response.status}): ${endpoint} — ${errorBody}`);
86
143
  }
87
- if (response.status === 204)
88
- return {};
89
- return (await response.json());
144
+ queryIdCache.set('__mutations_discovered__', 'true');
145
+ };
146
+ // Get a mutation query ID by name, discovering from bundles if needed
147
+ export const getMutationId = async (mutationName) => {
148
+ const cached = queryIdCache.get(mutationName);
149
+ if (cached)
150
+ return cached;
151
+ await discoverMutationIds();
152
+ const id = queryIdCache.get(mutationName);
153
+ if (!id)
154
+ throw ToolError.internal(`Mutation ${mutationName} not found in GitHub JS bundles`);
155
+ return id;
90
156
  };
91
- // Variant that returns raw text (for file contents)
92
- export const apiRaw = async (endpoint, options = {}) => {
157
+ export const discoverQueryId = async (queryName, discoveryPath, discoveryQuery) => {
158
+ const cached = queryIdCache.get(queryName);
159
+ if (cached)
160
+ return cached;
161
+ const result = await turboData(discoveryPath, discoveryQuery);
162
+ if (result.queryName && result.queryId) {
163
+ queryIdCache.set(result.queryName, result.queryId);
164
+ }
165
+ const id = queryIdCache.get(queryName);
166
+ if (!id)
167
+ throw ToolError.internal(`Could not discover query ID for ${queryName}`);
168
+ return id;
169
+ };
170
+ export const graphql = async (queryId, variables) => {
93
171
  if (!getAuth())
94
172
  throw ToolError.auth('Not authenticated — please log in to GitHub.');
95
- let url = `${API_BASE}${endpoint}`;
96
- if (options.query) {
97
- const params = new URLSearchParams();
98
- for (const [key, value] of Object.entries(options.query)) {
99
- if (value !== undefined)
100
- params.append(key, String(value));
173
+ const csrf = requireCsrf();
174
+ const response = await doFetch('/_graphql', {
175
+ method: 'POST',
176
+ headers: {
177
+ 'Content-Type': 'application/json',
178
+ Accept: 'application/json',
179
+ 'GitHub-Verified-Fetch': 'true',
180
+ 'X-CSRF-Token': csrf,
181
+ },
182
+ body: JSON.stringify({ query: queryId, variables }),
183
+ });
184
+ if (!response.ok)
185
+ return classifyError(response, '/_graphql');
186
+ const result = (await response.json());
187
+ if (result.errors?.length && !result.data) {
188
+ const err = result.errors[0];
189
+ if (err?.type === 'unknownQuery') {
190
+ // Persisted query ID expired — clear cache and report
191
+ queryIdCache.clear();
192
+ throw ToolError.internal('GraphQL persisted query expired — GitHub may have deployed a new version. Please retry.');
101
193
  }
102
- const qs = params.toString();
103
- if (qs)
104
- url += `?${qs}`;
194
+ throw ToolError.internal(`GraphQL error: ${err?.message ?? JSON.stringify(result.errors)}`);
105
195
  }
106
- const headers = {
107
- Accept: options.accept ?? 'application/vnd.github.raw+json',
108
- 'X-GitHub-Api-Version': '2022-11-28',
109
- };
110
- let response;
111
- try {
112
- response = await fetch(url, {
113
- method: options.method ?? 'GET',
114
- headers,
115
- signal: AbortSignal.timeout(30_000),
116
- });
196
+ return result.data;
197
+ };
198
+ // --- Transport: HTML page embedded data ---
199
+ // Fetches a page as HTML and extracts structured data from embedded script tags.
200
+ // Used for PR detail, repo page, and other pages with rich embedded JSON.
201
+ export const pageEmbeddedData = async (path) => {
202
+ if (!getAuth())
203
+ throw ToolError.auth('Not authenticated — please log in to GitHub.');
204
+ // X-Requested-With: XMLHttpRequest makes GitHub return the full page with all
205
+ // embedded React data. Without it, GitHub returns a lightweight shell that
206
+ // loads React data asynchronously.
207
+ const html = await fetchText(path, {
208
+ headers: { Accept: 'text/html', 'X-Requested-With': 'XMLHttpRequest' },
209
+ });
210
+ const match = html.match(/<script[^>]*data-target="react-app\.embeddedData"[^>]*>([\s\S]*?)<\/script>/);
211
+ if (!match?.[1])
212
+ throw ToolError.internal(`No embedded data found in ${path}`);
213
+ const embedded = JSON.parse(match[1]);
214
+ return (embedded.payload ?? embedded);
215
+ };
216
+ // --- Transport: Form POST ---
217
+ // For write operations that use traditional form submissions with CSRF tokens.
218
+ // Fetches the form page first to get a form-specific CSRF token, then POSTs.
219
+ export const formPost = async (formPagePath, postPath, body, options) => {
220
+ if (!getAuth())
221
+ throw ToolError.auth('Not authenticated — please log in to GitHub.');
222
+ // Fetch the form page to get a fresh CSRF token
223
+ const formHtml = await fetchText(formPagePath, {
224
+ headers: { Accept: 'text/html' },
225
+ });
226
+ const csrfSelector = options?.csrfSelector ?? `form[action*="${postPath}"] input[name="authenticity_token"]`;
227
+ const doc = new DOMParser().parseFromString(formHtml, 'text/html');
228
+ let csrf = doc.querySelector(csrfSelector)?.value;
229
+ // Fall back to any authenticity_token on the page
230
+ if (!csrf) {
231
+ csrf = doc.querySelector('input[name="authenticity_token"]')?.value ?? undefined;
117
232
  }
118
- catch (err) {
119
- if (err instanceof DOMException && err.name === 'TimeoutError')
120
- throw ToolError.timeout(`API request timed out: ${endpoint}`);
121
- if (err instanceof DOMException && err.name === 'AbortError')
122
- throw new ToolError('Request was aborted', 'aborted');
123
- throw new ToolError(`Network error: ${err instanceof Error ? err.message : String(err)}`, 'network_error', {
124
- category: 'internal',
125
- retryable: true,
126
- });
233
+ if (!csrf)
234
+ throw ToolError.auth(`CSRF token not found on ${formPagePath}`);
235
+ const formData = new URLSearchParams();
236
+ formData.set('authenticity_token', csrf);
237
+ for (const [key, value] of Object.entries(body)) {
238
+ if (value !== undefined && value !== null) {
239
+ formData.set(key, String(value));
240
+ }
127
241
  }
128
- if (!response.ok) {
129
- const errorBody = (await response.text().catch(() => '')).substring(0, 512);
130
- if (response.status === 429) {
131
- const retryAfter = response.headers.get('Retry-After');
132
- const retryMs = retryAfter !== null ? parseRetryAfterMs(retryAfter) : undefined;
133
- throw ToolError.rateLimited(`Rate limited: ${endpoint} — ${errorBody}`, retryMs);
242
+ const response = await doFetch(postPath, {
243
+ method: 'POST',
244
+ headers: {
245
+ 'Content-Type': 'application/x-www-form-urlencoded',
246
+ Accept: 'application/json',
247
+ },
248
+ body: formData.toString(),
249
+ });
250
+ if (!response.ok)
251
+ return classifyError(response, postPath);
252
+ const ct = response.headers.get('content-type') ?? '';
253
+ if (ct.includes('json')) {
254
+ return (await response.json());
255
+ }
256
+ // Some form posts redirect (302) or return HTML — treat as success
257
+ return {};
258
+ };
259
+ // --- Transport: Page form submission via XHR ---
260
+ // Fetches a page, locates a form by selector, populates fields, and submits
261
+ // via XMLHttpRequest with X-Requested-With: XMLHttpRequest to get a JSON response
262
+ // instead of a redirect. This is how GitHub's own JS submits comments and mutations.
263
+ export const submitPageForm = async (pagePath, formSelector, fields) => {
264
+ if (!getAuth())
265
+ throw ToolError.auth('Not authenticated — please log in to GitHub.');
266
+ // Fetch the page HTML to get the form with valid CSRF and timestamps.
267
+ // X-Requested-With: XMLHttpRequest ensures GitHub returns the full page content
268
+ // (without it, GitHub returns a lightweight shell for Turbo navigation).
269
+ const html = await fetchText(pagePath, {
270
+ headers: { Accept: 'text/html', 'X-Requested-With': 'XMLHttpRequest' },
271
+ });
272
+ const doc = new DOMParser().parseFromString(html, 'text/html');
273
+ const form = doc.querySelector(formSelector);
274
+ if (!form)
275
+ throw ToolError.internal(`Form not found: ${formSelector} on ${pagePath}`);
276
+ const action = form.getAttribute('action');
277
+ if (!action)
278
+ throw ToolError.internal(`Form has no action attribute on ${pagePath}`);
279
+ // Build FormData from the form's existing hidden inputs
280
+ const formData = new FormData();
281
+ const inputs = form.querySelectorAll('input');
282
+ for (const input of inputs) {
283
+ const name = input.getAttribute('name');
284
+ if (name) {
285
+ formData.set(name, input.value ?? '');
134
286
  }
135
- if (response.status === 401 || response.status === 403)
136
- throw ToolError.auth(`Auth error (${response.status}): ${errorBody}`);
137
- if (response.status === 404)
138
- throw ToolError.notFound(`Not found: ${endpoint} — ${errorBody}`);
139
- if (response.status === 422)
140
- throw ToolError.validation(`Validation error: ${endpoint} — ${errorBody}`);
141
- throw ToolError.internal(`API error (${response.status}): ${endpoint} — ${errorBody}`);
142
287
  }
143
- return response.text();
288
+ // Override/add the provided fields
289
+ for (const [key, value] of Object.entries(fields)) {
290
+ formData.set(key, value);
291
+ }
292
+ return xhrSubmit(action, formData);
293
+ };
294
+ // Submit a form directly to an endpoint with known fields and a CSRF token
295
+ // extracted from the live DOM. Used when the form is on the current page.
296
+ export const submitDirectForm = async (action, fields, csrfToken) => {
297
+ if (!getAuth())
298
+ throw ToolError.auth('Not authenticated — please log in to GitHub.');
299
+ const formData = new FormData();
300
+ formData.set('authenticity_token', csrfToken);
301
+ for (const [key, value] of Object.entries(fields)) {
302
+ formData.set(key, value);
303
+ }
304
+ return xhrSubmit(action, formData);
305
+ };
306
+ // Internal XHR submission — GitHub requires X-Requested-With for AJAX form handling
307
+ const xhrSubmit = (action, formData) => new Promise((resolve, reject) => {
308
+ const xhr = new XMLHttpRequest();
309
+ xhr.open('POST', action, true);
310
+ xhr.setRequestHeader('Accept', 'application/json');
311
+ xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
312
+ xhr.withCredentials = true;
313
+ xhr.timeout = 30_000;
314
+ xhr.onload = () => {
315
+ if (xhr.status >= 200 && xhr.status < 300) {
316
+ try {
317
+ resolve(JSON.parse(xhr.responseText));
318
+ }
319
+ catch {
320
+ resolve({});
321
+ }
322
+ }
323
+ else if (xhr.status === 401 || xhr.status === 403) {
324
+ reject(ToolError.auth(`Auth error (${xhr.status}): ${action}`));
325
+ }
326
+ else if (xhr.status === 404) {
327
+ reject(ToolError.notFound(`Not found: ${action}`));
328
+ }
329
+ else if (xhr.status === 422) {
330
+ reject(ToolError.validation(`Validation error (${xhr.status}): ${action} — ${xhr.responseText.substring(0, 200)}`));
331
+ }
332
+ else {
333
+ reject(ToolError.internal(`Form submission error (${xhr.status}): ${action}`));
334
+ }
335
+ };
336
+ xhr.onerror = () => reject(ToolError.internal(`Network error submitting form: ${action}`));
337
+ xhr.ontimeout = () => reject(ToolError.timeout(`Form submission timed out: ${action}`));
338
+ xhr.send(formData);
339
+ });
340
+ // --- Transport: Raw text fetch ---
341
+ // For file contents, diffs, and other raw text endpoints.
342
+ export const fetchRawText = async (path) => {
343
+ if (!getAuth())
344
+ throw ToolError.auth('Not authenticated — please log in to GitHub.');
345
+ return fetchText(path);
144
346
  };
145
347
  //# sourceMappingURL=github-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-api.js","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-api.js","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,17 @@
1
1
  import { z } from 'zod';
2
2
  export declare const addReaction: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
- owner: z.ZodString;
4
- repo: z.ZodString;
3
+ subject_id: z.ZodString;
5
4
  content: z.ZodEnum<{
6
- heart: "heart";
7
- laugh: "laugh";
8
- rocket: "rocket";
9
5
  "+1": "+1";
10
6
  [-1]: "-1";
7
+ laugh: "laugh";
11
8
  confused: "confused";
9
+ heart: "heart";
12
10
  hooray: "hooray";
11
+ rocket: "rocket";
13
12
  eyes: "eyes";
14
13
  }>;
15
- issue_number: z.ZodOptional<z.ZodNumber>;
16
- comment_id: z.ZodOptional<z.ZodNumber>;
17
14
  }, z.core.$strip>, z.ZodObject<{
18
- id: z.ZodNumber;
19
- content: z.ZodString;
15
+ success: z.ZodBoolean;
20
16
  }, z.core.$strip>>;
21
17
  //# sourceMappingURL=add-reaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-reaction.d.ts","sourceRoot":"","sources":["../../src/tools/add-reaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;kBA4CtB,CAAC"}
1
+ {"version":3,"file":"add-reaction.d.ts","sourceRoot":"","sources":["../../src/tools/add-reaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;kBAkCtB,CAAC"}