ghagga 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/commands/login.test.js +0 -2
  2. package/dist/commands/login.test.js.map +1 -1
  3. package/dist/commands/review-output.test.js +28 -0
  4. package/dist/commands/review-output.test.js.map +1 -1
  5. package/dist/commands/review.d.ts +12 -0
  6. package/dist/commands/review.d.ts.map +1 -1
  7. package/dist/commands/review.js +225 -3
  8. package/dist/commands/review.js.map +1 -1
  9. package/dist/commands/review.mr-exit.test.d.ts +13 -0
  10. package/dist/commands/review.mr-exit.test.d.ts.map +1 -0
  11. package/dist/commands/review.mr-exit.test.js +190 -0
  12. package/dist/commands/review.mr-exit.test.js.map +1 -0
  13. package/dist/commands/review.postback-disclosure.test.d.ts +22 -0
  14. package/dist/commands/review.postback-disclosure.test.d.ts.map +1 -0
  15. package/dist/commands/review.postback-disclosure.test.js +192 -0
  16. package/dist/commands/review.postback-disclosure.test.js.map +1 -0
  17. package/dist/commands/review.pr-exit.test.d.ts +13 -0
  18. package/dist/commands/review.pr-exit.test.d.ts.map +1 -0
  19. package/dist/commands/review.pr-exit.test.js +162 -0
  20. package/dist/commands/review.pr-exit.test.js.map +1 -0
  21. package/dist/commands/review.pr-jenkins.test.d.ts +16 -0
  22. package/dist/commands/review.pr-jenkins.test.d.ts.map +1 -0
  23. package/dist/commands/review.pr-jenkins.test.js +106 -0
  24. package/dist/commands/review.pr-jenkins.test.js.map +1 -0
  25. package/dist/commands/review.pr-nativeid-fallback.test.d.ts +15 -0
  26. package/dist/commands/review.pr-nativeid-fallback.test.d.ts.map +1 -0
  27. package/dist/commands/review.pr-nativeid-fallback.test.js +151 -0
  28. package/dist/commands/review.pr-nativeid-fallback.test.js.map +1 -0
  29. package/dist/commands/review.test.js +4 -0
  30. package/dist/commands/review.test.js.map +1 -1
  31. package/dist/index.js +39 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/lib/cli-github-client-port.d.ts +52 -0
  34. package/dist/lib/cli-github-client-port.d.ts.map +1 -0
  35. package/dist/lib/cli-github-client-port.js +199 -0
  36. package/dist/lib/cli-github-client-port.js.map +1 -0
  37. package/dist/lib/cli-github-client-port.test.d.ts +10 -0
  38. package/dist/lib/cli-github-client-port.test.d.ts.map +1 -0
  39. package/dist/lib/cli-github-client-port.test.js +47 -0
  40. package/dist/lib/cli-github-client-port.test.js.map +1 -0
  41. package/dist/lib/cli-gitlab-client-port.d.ts +62 -0
  42. package/dist/lib/cli-gitlab-client-port.d.ts.map +1 -0
  43. package/dist/lib/cli-gitlab-client-port.js +209 -0
  44. package/dist/lib/cli-gitlab-client-port.js.map +1 -0
  45. package/dist/lib/cli-gitlab-client-port.test.d.ts +9 -0
  46. package/dist/lib/cli-gitlab-client-port.test.d.ts.map +1 -0
  47. package/dist/lib/cli-gitlab-client-port.test.js +278 -0
  48. package/dist/lib/cli-gitlab-client-port.test.js.map +1 -0
  49. package/dist/lib/config.d.ts +12 -0
  50. package/dist/lib/config.d.ts.map +1 -1
  51. package/dist/lib/config.js +9 -0
  52. package/dist/lib/config.js.map +1 -1
  53. package/dist/lib/forge-postback.d.ts +72 -0
  54. package/dist/lib/forge-postback.d.ts.map +1 -0
  55. package/dist/lib/forge-postback.js +39 -0
  56. package/dist/lib/forge-postback.js.map +1 -0
  57. package/dist/lib/gitlab-api.d.ts +50 -0
  58. package/dist/lib/gitlab-api.d.ts.map +1 -0
  59. package/dist/lib/gitlab-api.js +75 -0
  60. package/dist/lib/gitlab-api.js.map +1 -0
  61. package/dist/lib/gitlab-api.test.d.ts +2 -0
  62. package/dist/lib/gitlab-api.test.d.ts.map +1 -0
  63. package/dist/lib/gitlab-api.test.js +79 -0
  64. package/dist/lib/gitlab-api.test.js.map +1 -0
  65. package/dist/lib/gitlab-e2e.manual.test.d.ts +24 -0
  66. package/dist/lib/gitlab-e2e.manual.test.d.ts.map +1 -0
  67. package/dist/lib/gitlab-e2e.manual.test.js +57 -0
  68. package/dist/lib/gitlab-e2e.manual.test.js.map +1 -0
  69. package/dist/lib/gitlab-token.d.ts +17 -0
  70. package/dist/lib/gitlab-token.d.ts.map +1 -0
  71. package/dist/lib/gitlab-token.js +24 -0
  72. package/dist/lib/gitlab-token.js.map +1 -0
  73. package/dist/lib/gitlab-token.test.d.ts +2 -0
  74. package/dist/lib/gitlab-token.test.d.ts.map +1 -0
  75. package/dist/lib/gitlab-token.test.js +38 -0
  76. package/dist/lib/gitlab-token.test.js.map +1 -0
  77. package/dist/lib/oauth.test.js +0 -1
  78. package/dist/lib/oauth.test.js.map +1 -1
  79. package/dist/lib/pr-postback.d.ts +42 -0
  80. package/dist/lib/pr-postback.d.ts.map +1 -0
  81. package/dist/lib/pr-postback.js +44 -0
  82. package/dist/lib/pr-postback.js.map +1 -0
  83. package/dist/lib/pr-postback.test.d.ts +9 -0
  84. package/dist/lib/pr-postback.test.d.ts.map +1 -0
  85. package/dist/lib/pr-postback.test.js +196 -0
  86. package/dist/lib/pr-postback.test.js.map +1 -0
  87. package/dist/lib/pr-token.d.ts +15 -0
  88. package/dist/lib/pr-token.d.ts.map +1 -0
  89. package/dist/lib/pr-token.js +22 -0
  90. package/dist/lib/pr-token.js.map +1 -0
  91. package/dist/lib/pr-token.test.d.ts +2 -0
  92. package/dist/lib/pr-token.test.d.ts.map +1 -0
  93. package/dist/lib/pr-token.test.js +25 -0
  94. package/dist/lib/pr-token.test.js.map +1 -0
  95. package/package.json +8 -7
@@ -0,0 +1,79 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { GitLabApiError, parseGitLabRemote } from './gitlab-api.js';
3
+ describe('parseGitLabRemote (host + projectPath, any GitLab host)', () => {
4
+ it('parses an HTTPS gitlab.com remote', () => {
5
+ expect(parseGitLabRemote('https://gitlab.com/acme/widgets.git')).toEqual({
6
+ host: 'gitlab.com',
7
+ projectPath: 'acme/widgets',
8
+ });
9
+ });
10
+ it('parses an HTTPS remote without .git suffix', () => {
11
+ expect(parseGitLabRemote('https://gitlab.com/acme/widgets')).toEqual({
12
+ host: 'gitlab.com',
13
+ projectPath: 'acme/widgets',
14
+ });
15
+ });
16
+ it('parses an SSH (git@) remote', () => {
17
+ expect(parseGitLabRemote('git@gitlab.com:acme/widgets.git')).toEqual({
18
+ host: 'gitlab.com',
19
+ projectPath: 'acme/widgets',
20
+ });
21
+ });
22
+ it('parses an ssh:// protocol remote', () => {
23
+ expect(parseGitLabRemote('ssh://git@gitlab.com/acme/widgets.git')).toEqual({
24
+ host: 'gitlab.com',
25
+ projectPath: 'acme/widgets',
26
+ });
27
+ });
28
+ it('supports NESTED groups (group/subgroup/project)', () => {
29
+ expect(parseGitLabRemote('https://gitlab.com/group/subgroup/project.git')).toEqual({
30
+ host: 'gitlab.com',
31
+ projectPath: 'group/subgroup/project',
32
+ });
33
+ expect(parseGitLabRemote('git@gitlab.com:group/subgroup/project.git')).toEqual({
34
+ host: 'gitlab.com',
35
+ projectPath: 'group/subgroup/project',
36
+ });
37
+ });
38
+ // ── Self-hosted GitLab (FIX A) ──────────────────────────────────
39
+ it('parses a self-hosted HTTPS remote and returns its host', () => {
40
+ expect(parseGitLabRemote('https://gitlab.example.com/team/repo.git')).toEqual({
41
+ host: 'gitlab.example.com',
42
+ projectPath: 'team/repo',
43
+ });
44
+ });
45
+ it('parses a self-hosted SSH (git@) remote', () => {
46
+ expect(parseGitLabRemote('git@gitlab.example.com:team/repo.git')).toEqual({
47
+ host: 'gitlab.example.com',
48
+ projectPath: 'team/repo',
49
+ });
50
+ });
51
+ it('strips a port from an ssh:// self-hosted remote (API rides HTTPS)', () => {
52
+ expect(parseGitLabRemote('ssh://git@gitlab.example.com:2222/team/repo.git')).toEqual({
53
+ host: 'gitlab.example.com',
54
+ projectPath: 'team/repo',
55
+ });
56
+ });
57
+ it('strips userinfo from an HTTPS remote', () => {
58
+ expect(parseGitLabRemote('https://user:tok@gitlab.example.com/team/repo.git')).toEqual({
59
+ host: 'gitlab.example.com',
60
+ projectPath: 'team/repo',
61
+ });
62
+ });
63
+ it('throws on a github.com remote (obvious --mr misuse)', () => {
64
+ expect(() => parseGitLabRemote('https://github.com/acme/widgets.git')).toThrow(/Not a GitLab remote URL/);
65
+ expect(() => parseGitLabRemote('git@github.com:acme/widgets.git')).toThrow(/Not a GitLab remote URL/);
66
+ });
67
+ it('throws on an unrecognizable remote', () => {
68
+ expect(() => parseGitLabRemote('not-a-url')).toThrow(/Not a GitLab remote URL/);
69
+ });
70
+ });
71
+ describe('GitLabApiError', () => {
72
+ it('carries status + body', () => {
73
+ const err = new GitLabApiError('boom', 404, 'not found');
74
+ expect(err.status).toBe(404);
75
+ expect(err.body).toBe('not found');
76
+ expect(err.name).toBe('GitLabApiError');
77
+ });
78
+ });
79
+ //# sourceMappingURL=gitlab-api.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-api.test.js","sourceRoot":"","sources":["../../src/lib/gitlab-api.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * P4 task 4.3 — MANUAL / E2E acceptance gate for the GitLab MR summary post-back
3
+ * (R-GITLAB). This is the ONLY test in the suite that talks to a LIVE GitLab
4
+ * instance. It is `skipIf(!process.env.GITLAB_PAT)` so CI ALWAYS skips it — CI
5
+ * coverage of the GitLab REST surface lives in `cli-gitlab-client-port.test.ts`
6
+ * (fetch-mocked). This file is the real-instance sign-off the spec mandates.
7
+ *
8
+ * HOW TO RUN IT MANUALLY
9
+ * ----------------------
10
+ * Against a throwaway GitLab project + open MR you control:
11
+ *
12
+ * export GITLAB_PAT=glpat-xxxxxxxxxxxxxxxxxxxx # PAT with `api` scope
13
+ * export GITLAB_E2E_PROJECT=group/your-project # group/project path
14
+ * export GITLAB_E2E_MR=1 # an OPEN MR iid in it
15
+ * pnpm --filter ghagga exec vitest run src/lib/gitlab-e2e.manual.test.ts
16
+ *
17
+ * It will: resolve the numeric project id from the path, post (idempotently
18
+ * upsert) a marker-tagged summary note to the MR, assert the returned id is a
19
+ * positive number, then run a SECOND upsert and assert the first note was swept
20
+ * (deletedNativeIds non-empty) — proving the find→delete→repost idempotency
21
+ * against the live API. Inspect the MR afterwards: exactly ONE GHAGGA note.
22
+ */
23
+ export {};
24
+ //# sourceMappingURL=gitlab-e2e.manual.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-e2e.manual.test.d.ts","sourceRoot":"","sources":["../../src/lib/gitlab-e2e.manual.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * P4 task 4.3 — MANUAL / E2E acceptance gate for the GitLab MR summary post-back
3
+ * (R-GITLAB). This is the ONLY test in the suite that talks to a LIVE GitLab
4
+ * instance. It is `skipIf(!process.env.GITLAB_PAT)` so CI ALWAYS skips it — CI
5
+ * coverage of the GitLab REST surface lives in `cli-gitlab-client-port.test.ts`
6
+ * (fetch-mocked). This file is the real-instance sign-off the spec mandates.
7
+ *
8
+ * HOW TO RUN IT MANUALLY
9
+ * ----------------------
10
+ * Against a throwaway GitLab project + open MR you control:
11
+ *
12
+ * export GITLAB_PAT=glpat-xxxxxxxxxxxxxxxxxxxx # PAT with `api` scope
13
+ * export GITLAB_E2E_PROJECT=group/your-project # group/project path
14
+ * export GITLAB_E2E_MR=1 # an OPEN MR iid in it
15
+ * pnpm --filter ghagga exec vitest run src/lib/gitlab-e2e.manual.test.ts
16
+ *
17
+ * It will: resolve the numeric project id from the path, post (idempotently
18
+ * upsert) a marker-tagged summary note to the MR, assert the returned id is a
19
+ * positive number, then run a SECOND upsert and assert the first note was swept
20
+ * (deletedNativeIds non-empty) — proving the find→delete→repost idempotency
21
+ * against the live API. Inspect the MR afterwards: exactly ONE GHAGGA note.
22
+ */
23
+ import { GitLabForgeAdapter } from 'ghagga-forge';
24
+ import { describe, expect, it } from 'vitest';
25
+ import { createCliGitLabClientPort, resolveGitLabProjectId } from './cli-gitlab-client-port.js';
26
+ import { postSummaryComment } from './pr-postback.js';
27
+ const PAT = process.env.GITLAB_PAT;
28
+ const PROJECT_PATH = process.env.GITLAB_E2E_PROJECT ?? '';
29
+ const MR_IID = Number.parseInt(process.env.GITLAB_E2E_MR ?? '', 10);
30
+ const MARKER = { html: '<!-- ghagga-review -->' };
31
+ describe('GitLab MR summary post-back — LIVE E2E (manual gate, R-GITLAB)', () => {
32
+ it.skipIf(!PAT)('resolves numeric project id + posts a summary note + sweeps the stale one on re-run', async () => {
33
+ expect(PROJECT_PATH, 'set GITLAB_E2E_PROJECT=group/project').not.toBe('');
34
+ expect(Number.isInteger(MR_IID) && MR_IID > 0, 'set GITLAB_E2E_MR=<open MR iid>').toBe(true);
35
+ const token = PAT;
36
+ const projectId = await resolveGitLabProjectId(PROJECT_PATH, token);
37
+ expect(projectId).toMatch(/^\d+$/); // numeric project id (R-GITLAB nativeId)
38
+ const adapter = new GitLabForgeAdapter({
39
+ client: createCliGitLabClientPort(),
40
+ token,
41
+ projectId,
42
+ });
43
+ const ref = {
44
+ repo: { kind: 'gitlab', nativeId: projectId, path: PROJECT_PATH },
45
+ iid: MR_IID,
46
+ };
47
+ const body = `${MARKER.html}\n## GHAGGA E2E\nposted at ${new Date().toISOString()}`;
48
+ // First upsert: posts a fresh note.
49
+ const first = await postSummaryComment(adapter, ref, body, MARKER);
50
+ expect(first.createdNativeId).toBeGreaterThan(0);
51
+ // Second upsert: must SWEEP the first (idempotency) and repost.
52
+ const second = await postSummaryComment(adapter, ref, body, MARKER);
53
+ expect(second.createdNativeId).toBeGreaterThan(0);
54
+ expect(second.deletedNativeIds).toContain(first.createdNativeId);
55
+ }, 30_000);
56
+ });
57
+ //# sourceMappingURL=gitlab-e2e.manual.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-e2e.manual.test.js","sourceRoot":"","sources":["../../src/lib/gitlab-e2e.manual.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACnC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;AAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AACpE,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;AAElD,QAAQ,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC9E,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CACb,qFAAqF,EACrF,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,YAAY,EAAE,sCAAsC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,iCAAiC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7F,MAAM,KAAK,GAAG,GAAa,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACpE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,yCAAyC;QAE7E,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC;YACrC,MAAM,EAAE,yBAAyB,EAAE;YACnC,KAAK;YACL,SAAS;SACV,CAAC,CAAC;QACH,MAAM,GAAG,GAAG;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;YAC1E,GAAG,EAAE,MAAM;SACZ,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,8BAA8B,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAEpF,oCAAoC;QACpC,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEjD,gEAAgE;QAChE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnE,CAAC,EACD,MAAM,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Token resolution for the CLI GitLab MR post-back (`ghagga review --mr N`).
3
+ *
4
+ * Resolution order (CI-first, interactive fallback):
5
+ * 1. env GITLAB_TOKEN — the GitLab CI / standard convention.
6
+ * 2. env GL_TOKEN — the `glab` CLI / alternate convention.
7
+ * 3. a GitLab-SPECIFIC stored token (config `gitlabToken`), if one exists.
8
+ *
9
+ * CRITICAL: this does NOT fall back to the GitHub stored login token
10
+ * ({@link getStoredToken}). A GitHub token against the GitLab API yields a 401 /
11
+ * nonsense — a GitHub credential is NOT a GitLab credential. When no GitLab token
12
+ * resolves, return `null`; the caller turns that into an actionable error ONLY
13
+ * when `--mr` was actually requested (non-zero exit, P3/P4 exit semantics).
14
+ */
15
+ /** Resolve a GitLab token: env GITLAB_TOKEN > GL_TOKEN > GitLab-specific stored. */
16
+ export declare function resolveMrToken(env?: NodeJS.ProcessEnv, storedTokenFn?: () => string | null): string | null;
17
+ //# sourceMappingURL=gitlab-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-token.d.ts","sourceRoot":"","sources":["../../src/lib/gitlab-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,oFAAoF;AACpF,wBAAgB,cAAc,CAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,aAAa,GAAE,MAAM,MAAM,GAAG,IAA2B,GACxD,MAAM,GAAG,IAAI,CAKf"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Token resolution for the CLI GitLab MR post-back (`ghagga review --mr N`).
3
+ *
4
+ * Resolution order (CI-first, interactive fallback):
5
+ * 1. env GITLAB_TOKEN — the GitLab CI / standard convention.
6
+ * 2. env GL_TOKEN — the `glab` CLI / alternate convention.
7
+ * 3. a GitLab-SPECIFIC stored token (config `gitlabToken`), if one exists.
8
+ *
9
+ * CRITICAL: this does NOT fall back to the GitHub stored login token
10
+ * ({@link getStoredToken}). A GitHub token against the GitLab API yields a 401 /
11
+ * nonsense — a GitHub credential is NOT a GitLab credential. When no GitLab token
12
+ * resolves, return `null`; the caller turns that into an actionable error ONLY
13
+ * when `--mr` was actually requested (non-zero exit, P3/P4 exit semantics).
14
+ */
15
+ import { getStoredGitLabToken } from './config.js';
16
+ /** Resolve a GitLab token: env GITLAB_TOKEN > GL_TOKEN > GitLab-specific stored. */
17
+ export function resolveMrToken(env = process.env, storedTokenFn = getStoredGitLabToken) {
18
+ const fromEnv = env.GITLAB_TOKEN?.trim() || env.GL_TOKEN?.trim();
19
+ if (fromEnv)
20
+ return fromEnv;
21
+ const stored = storedTokenFn();
22
+ return stored?.trim() ? stored : null;
23
+ }
24
+ //# sourceMappingURL=gitlab-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-token.js","sourceRoot":"","sources":["../../src/lib/gitlab-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,oFAAoF;AACpF,MAAM,UAAU,cAAc,CAC5B,MAAyB,OAAO,CAAC,GAAG,EACpC,gBAAqC,oBAAoB;IAEzD,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,OAAO,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gitlab-token.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-token.test.d.ts","sourceRoot":"","sources":["../../src/lib/gitlab-token.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { resolveMrToken } from './gitlab-token.js';
3
+ describe('resolveMrToken (env GITLAB_TOKEN > GL_TOKEN > GitLab-specific stored)', () => {
4
+ it('prefers GITLAB_TOKEN over GL_TOKEN and stored', () => {
5
+ const token = resolveMrToken({ GITLAB_TOKEN: 'gl-primary', GL_TOKEN: 'gl-secondary' }, () => 'gl-stored');
6
+ expect(token).toBe('gl-primary');
7
+ });
8
+ it('falls back to GL_TOKEN when GITLAB_TOKEN is unset', () => {
9
+ const token = resolveMrToken({ GL_TOKEN: 'gl-secondary' }, () => 'gl-stored');
10
+ expect(token).toBe('gl-secondary');
11
+ });
12
+ it('falls back to the GitLab-specific stored token when no env token is set', () => {
13
+ const token = resolveMrToken({}, () => 'gl-stored');
14
+ expect(token).toBe('gl-stored');
15
+ });
16
+ it('returns null when no GitLab token resolves anywhere', () => {
17
+ const token = resolveMrToken({}, () => null);
18
+ expect(token).toBeNull();
19
+ });
20
+ it('treats blank/whitespace env tokens as unset and falls through', () => {
21
+ const token = resolveMrToken({ GITLAB_TOKEN: ' ', GL_TOKEN: '' }, () => 'gl-stored');
22
+ expect(token).toBe('gl-stored');
23
+ });
24
+ it('does NOT fall back to the GitHub stored token (FIX B)', async () => {
25
+ // The default stored-token fn must be the GitLab-specific one, NOT getStoredToken
26
+ // (GitHub). With no env tokens AND no GitLab stored token, resolution is null —
27
+ // even if a GitHub token is present in config, it must never be used here.
28
+ const config = await import('./config.js');
29
+ const ghSpy = vi.spyOn(config, 'getStoredToken').mockReturnValue('github-login-token');
30
+ // Inject the real GitLab getter explicitly to prove it does not read GitHub.
31
+ const token = resolveMrToken({}, () => null);
32
+ expect(token).toBeNull();
33
+ // The GitHub getter must not have been consulted by this resolution path.
34
+ expect(ghSpy).not.toHaveBeenCalled();
35
+ ghSpy.mockRestore();
36
+ });
37
+ });
38
+ //# sourceMappingURL=gitlab-token.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-token.test.js","sourceRoot":"","sources":["../../src/lib/gitlab-token.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,QAAQ,CAAC,uEAAuE,EAAE,GAAG,EAAE;IACrF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,KAAK,GAAG,cAAc,CAC1B,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAuB,EAC7E,GAAG,EAAE,CAAC,WAAW,CAClB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,KAAK,GAAG,cAAc,CAC1B,EAAE,QAAQ,EAAE,cAAc,EAAuB,EACjD,GAAG,EAAE,CAAC,WAAW,CAClB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,KAAK,GAAG,cAAc,CAAC,EAAuB,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,EAAuB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,KAAK,GAAG,cAAc,CAC1B,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAuB,EAC1D,GAAG,EAAE,CAAC,WAAW,CAClB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,kFAAkF;QAClF,gFAAgF;QAChF,2EAA2E;QAC3E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;QAEvF,6EAA6E;QAC7E,MAAM,KAAK,GAAG,cAAc,CAAC,EAAuB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzB,0EAA0E;QAC1E,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -53,7 +53,6 @@ describe('requestDeviceCode', () => {
53
53
  }),
54
54
  }));
55
55
  // Verify client_id is in the body
56
- // biome-ignore lint/style/noNonNullAssertion: test assertion on known mock data
57
56
  const callArgs = mockFetch.mock.calls[0];
58
57
  const body = JSON.parse(callArgs[1].body);
59
58
  expect(body.client_id).toBe(GITHUB_CLIENT_ID);
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.test.js","sourceRoot":"","sources":["../../src/lib/oauth.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth.test.js","sourceRoot":"","sources":["../../src/lib/oauth.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,mEAAmE;AAEnE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1B,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAElC,mEAAmE;AAEnE,SAAS,YAAY,CAAC,IAAa,EAAE,MAAM,GAAG,GAAG;IAC/C,OAAO;QACL,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QACjC,MAAM;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QACjC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAC;AAC3B,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,IAAI,GAAG,OAAO;IACnD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KACX,CAAC;AAC3B,CAAC;AAED,mEAAmE;AAEnE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,SAAS,CAAC,qBAAqB,CAC7B,YAAY,CAAC;YACX,WAAW,EAAE,QAAQ;YACrB,SAAS,EAAE,WAAW;YACtB,gBAAgB,EAAE,iCAAiC;YACnD,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC;SACZ,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEzC,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,sCAAsC,EACtC,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC;gBAC/B,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC,CAAC;SACH,CAAC,CACH,CAAC;QAEF,kCAAkC;QAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE9C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAEzE,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAC/C,sDAAsD,CACvD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,KAAK,UAAU,QAAQ,CAAC,UAAU,GAAG,QAAQ,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE;QACzE,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEpE,kDAAkD;QAClD,wCAAwC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,EAAE,CAAC,wBAAwB,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,SAAS,CAAC,qBAAqB,CAC7B,YAAY,CAAC;YACX,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,EAAE;SACV,CAAC,CACH,CAAC;QAEF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAE7B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,sBAAsB;QACtB,SAAS,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;QAClF,uBAAuB;QACvB,SAAS,CAAC,qBAAqB,CAC7B,YAAY,CAAC;YACX,YAAY,EAAE,SAAS;YACvB,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,EAAE;SACV,CAAC,CACH,CAAC;QAEF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEpD,gCAAgC;QAChC,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACxC,iCAAiC;QACjC,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAE7B,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,wBAAwB;QACxB,SAAS,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,2CAA2C;QAC3C,SAAS,CAAC,qBAAqB,CAC7B,YAAY,CAAC;YACX,YAAY,EAAE,UAAU;YACxB,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,EAAE;SACV,CAAC,CACH,CAAC;QAEF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAErD,uBAAuB;QACvB,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACxC,iDAAiD;QACjD,MAAM,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,SAAS,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,sEAAsE;QACtE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,SAAS,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,SAAS,CAAC,qBAAqB,CAC7B,YAAY,CAAC;YACX,KAAK,EAAE,cAAc;YACrB,iBAAiB,EAAE,sBAAsB;SAC1C,CAAC,CACH,CAAC;QAEF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kDAAkD,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,SAAS,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,6DAA6D;QAC7D,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAChC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAClE,CAAC;QAEF,kDAAkD;QAClD,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjD,qCAAqC;QACrC,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;QACtD,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;QAE3E,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,SAAS,CAAC,qBAAqB,CAC7B,YAAY,CAAC;YACX,KAAK,EAAE,UAAU;YACjB,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,+BAA+B;SAC5C,CAAC,CACH,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;QAEnD,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,6BAA6B,EAC7B,MAAM,CAAC,gBAAgB,CAAC;YACtB,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC;gBAC/B,aAAa,EAAE,qBAAqB;aACrC,CAAC;SACH,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpD,MAAM,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Forge-NEUTRAL summary post-back for the CLI.
3
+ *
4
+ * This is the single plumbing point the `ghagga review --pr N` (GitHub) path
5
+ * routes through — and the SAME function P4 will reuse for `--mr N` (GitLab).
6
+ * It is deliberately written against the forge-agnostic surface ONLY:
7
+ * - a `ForgeAdapterBase` (whatever forge built it — GitHub today, GitLab next),
8
+ * - a canonical `ChangeRequestRef`,
9
+ * - a pre-rendered comment `body` (caller renders via ghagga-core for parity),
10
+ * - a `CommentMarker`.
11
+ *
12
+ * It contains NO GitHub specifics: no owner/repo strings, no REST paths, no
13
+ * github-native ids, and no github-native boxing helper. All of that is
14
+ * encapsulated inside the adapter + its client port. To add GitLab in P4, the
15
+ * command-level glue builds a GitLab adapter + a `gitlab`-kind ref and calls
16
+ * THIS function UNCHANGED.
17
+ *
18
+ * Idempotency (find stale → delete all → post fresh) lives inside
19
+ * `adapter.upsertSummaryComment`; this wrapper just relays the adapter's RAW
20
+ * forge-native result. Boxing into a canonical `CommentId` (if ever needed) is
21
+ * the kind-specific HANDLER's concern, not this neutral seam's — the only
22
+ * consumer today logs the raw id, so we do not box at all.
23
+ */
24
+ import type { ChangeRequestRef, CommentMarker, ForgeAdapterBase } from 'ghagga-forge';
25
+ export interface PostBackResult {
26
+ /** The forge-native id of the summary comment that now exists. */
27
+ createdNativeId: number;
28
+ /** Forge-native ids of stale summary comments removed during the upsert. */
29
+ deletedNativeIds: number[];
30
+ }
31
+ /**
32
+ * Upsert the single GHAGGA summary comment on a change request via any forge
33
+ * adapter. Forge-neutral — usable for GitHub PRs (P3) and GitLab MRs (P4)
34
+ * UNCHANGED (zero GitHub coupling).
35
+ *
36
+ * @param adapter the forge adapter (built by the command glue per forge).
37
+ * @param ref the canonical change-request ref (PR/MR).
38
+ * @param body the rendered comment body (parity with the server post-back).
39
+ * @param marker the comment marker identifying GHAGGA-owned comments.
40
+ */
41
+ export declare function postSummaryComment(adapter: ForgeAdapterBase, ref: ChangeRequestRef, body: string, marker: CommentMarker): Promise<PostBackResult>;
42
+ //# sourceMappingURL=pr-postback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-postback.d.ts","sourceRoot":"","sources":["../../src/lib/pr-postback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,cAAc,CAAC,CASzB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Forge-NEUTRAL summary post-back for the CLI.
3
+ *
4
+ * This is the single plumbing point the `ghagga review --pr N` (GitHub) path
5
+ * routes through — and the SAME function P4 will reuse for `--mr N` (GitLab).
6
+ * It is deliberately written against the forge-agnostic surface ONLY:
7
+ * - a `ForgeAdapterBase` (whatever forge built it — GitHub today, GitLab next),
8
+ * - a canonical `ChangeRequestRef`,
9
+ * - a pre-rendered comment `body` (caller renders via ghagga-core for parity),
10
+ * - a `CommentMarker`.
11
+ *
12
+ * It contains NO GitHub specifics: no owner/repo strings, no REST paths, no
13
+ * github-native ids, and no github-native boxing helper. All of that is
14
+ * encapsulated inside the adapter + its client port. To add GitLab in P4, the
15
+ * command-level glue builds a GitLab adapter + a `gitlab`-kind ref and calls
16
+ * THIS function UNCHANGED.
17
+ *
18
+ * Idempotency (find stale → delete all → post fresh) lives inside
19
+ * `adapter.upsertSummaryComment`; this wrapper just relays the adapter's RAW
20
+ * forge-native result. Boxing into a canonical `CommentId` (if ever needed) is
21
+ * the kind-specific HANDLER's concern, not this neutral seam's — the only
22
+ * consumer today logs the raw id, so we do not box at all.
23
+ */
24
+ /**
25
+ * Upsert the single GHAGGA summary comment on a change request via any forge
26
+ * adapter. Forge-neutral — usable for GitHub PRs (P3) and GitLab MRs (P4)
27
+ * UNCHANGED (zero GitHub coupling).
28
+ *
29
+ * @param adapter the forge adapter (built by the command glue per forge).
30
+ * @param ref the canonical change-request ref (PR/MR).
31
+ * @param body the rendered comment body (parity with the server post-back).
32
+ * @param marker the comment marker identifying GHAGGA-owned comments.
33
+ */
34
+ export async function postSummaryComment(adapter, ref, body, marker) {
35
+ const result = await adapter.upsertSummaryComment(ref, body, marker);
36
+ // Relay the adapter's RAW forge-native result. No boxing here — this keeps
37
+ // the seam fully forge-agnostic so P4 reuses it unchanged. The kind-specific
38
+ // handler boxes/logs as it sees fit.
39
+ return {
40
+ createdNativeId: result.created,
41
+ deletedNativeIds: result.deleted,
42
+ };
43
+ }
44
+ //# sourceMappingURL=pr-postback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-postback.js","sourceRoot":"","sources":["../../src/lib/pr-postback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAWH;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAyB,EACzB,GAAqB,EACrB,IAAY,EACZ,MAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,2EAA2E;IAC3E,6EAA6E;IAC7E,qCAAqC;IACrC,OAAO;QACL,eAAe,EAAE,MAAM,CAAC,OAAO;QAC/B,gBAAgB,EAAE,MAAM,CAAC,OAAO;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * R-CLI: the `--pr` post-back routes through the REAL GitHubForgeAdapter folding
3
+ * over the CLI's own GitHubClientPort. We mock ONLY `fetch` (the network seam),
4
+ * so this exercises the genuine adapter find→delete→post idempotency path and
5
+ * the genuine CLI port REST calls — a faithful simulation against a mocked
6
+ * GitHub.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=pr-postback.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-postback.test.d.ts","sourceRoot":"","sources":["../../src/lib/pr-postback.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}