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.
- package/dist/commands/login.test.js +0 -2
- package/dist/commands/login.test.js.map +1 -1
- package/dist/commands/review-output.test.js +28 -0
- package/dist/commands/review-output.test.js.map +1 -1
- package/dist/commands/review.d.ts +12 -0
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +225 -3
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/review.mr-exit.test.d.ts +13 -0
- package/dist/commands/review.mr-exit.test.d.ts.map +1 -0
- package/dist/commands/review.mr-exit.test.js +190 -0
- package/dist/commands/review.mr-exit.test.js.map +1 -0
- package/dist/commands/review.postback-disclosure.test.d.ts +22 -0
- package/dist/commands/review.postback-disclosure.test.d.ts.map +1 -0
- package/dist/commands/review.postback-disclosure.test.js +192 -0
- package/dist/commands/review.postback-disclosure.test.js.map +1 -0
- package/dist/commands/review.pr-exit.test.d.ts +13 -0
- package/dist/commands/review.pr-exit.test.d.ts.map +1 -0
- package/dist/commands/review.pr-exit.test.js +162 -0
- package/dist/commands/review.pr-exit.test.js.map +1 -0
- package/dist/commands/review.pr-jenkins.test.d.ts +16 -0
- package/dist/commands/review.pr-jenkins.test.d.ts.map +1 -0
- package/dist/commands/review.pr-jenkins.test.js +106 -0
- package/dist/commands/review.pr-jenkins.test.js.map +1 -0
- package/dist/commands/review.pr-nativeid-fallback.test.d.ts +15 -0
- package/dist/commands/review.pr-nativeid-fallback.test.d.ts.map +1 -0
- package/dist/commands/review.pr-nativeid-fallback.test.js +151 -0
- package/dist/commands/review.pr-nativeid-fallback.test.js.map +1 -0
- package/dist/commands/review.test.js +4 -0
- package/dist/commands/review.test.js.map +1 -1
- package/dist/index.js +39 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/cli-github-client-port.d.ts +52 -0
- package/dist/lib/cli-github-client-port.d.ts.map +1 -0
- package/dist/lib/cli-github-client-port.js +199 -0
- package/dist/lib/cli-github-client-port.js.map +1 -0
- package/dist/lib/cli-github-client-port.test.d.ts +10 -0
- package/dist/lib/cli-github-client-port.test.d.ts.map +1 -0
- package/dist/lib/cli-github-client-port.test.js +47 -0
- package/dist/lib/cli-github-client-port.test.js.map +1 -0
- package/dist/lib/cli-gitlab-client-port.d.ts +62 -0
- package/dist/lib/cli-gitlab-client-port.d.ts.map +1 -0
- package/dist/lib/cli-gitlab-client-port.js +209 -0
- package/dist/lib/cli-gitlab-client-port.js.map +1 -0
- package/dist/lib/cli-gitlab-client-port.test.d.ts +9 -0
- package/dist/lib/cli-gitlab-client-port.test.d.ts.map +1 -0
- package/dist/lib/cli-gitlab-client-port.test.js +278 -0
- package/dist/lib/cli-gitlab-client-port.test.js.map +1 -0
- package/dist/lib/config.d.ts +12 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +9 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/forge-postback.d.ts +72 -0
- package/dist/lib/forge-postback.d.ts.map +1 -0
- package/dist/lib/forge-postback.js +39 -0
- package/dist/lib/forge-postback.js.map +1 -0
- package/dist/lib/gitlab-api.d.ts +50 -0
- package/dist/lib/gitlab-api.d.ts.map +1 -0
- package/dist/lib/gitlab-api.js +75 -0
- package/dist/lib/gitlab-api.js.map +1 -0
- package/dist/lib/gitlab-api.test.d.ts +2 -0
- package/dist/lib/gitlab-api.test.d.ts.map +1 -0
- package/dist/lib/gitlab-api.test.js +79 -0
- package/dist/lib/gitlab-api.test.js.map +1 -0
- package/dist/lib/gitlab-e2e.manual.test.d.ts +24 -0
- package/dist/lib/gitlab-e2e.manual.test.d.ts.map +1 -0
- package/dist/lib/gitlab-e2e.manual.test.js +57 -0
- package/dist/lib/gitlab-e2e.manual.test.js.map +1 -0
- package/dist/lib/gitlab-token.d.ts +17 -0
- package/dist/lib/gitlab-token.d.ts.map +1 -0
- package/dist/lib/gitlab-token.js +24 -0
- package/dist/lib/gitlab-token.js.map +1 -0
- package/dist/lib/gitlab-token.test.d.ts +2 -0
- package/dist/lib/gitlab-token.test.d.ts.map +1 -0
- package/dist/lib/gitlab-token.test.js +38 -0
- package/dist/lib/gitlab-token.test.js.map +1 -0
- package/dist/lib/oauth.test.js +0 -1
- package/dist/lib/oauth.test.js.map +1 -1
- package/dist/lib/pr-postback.d.ts +42 -0
- package/dist/lib/pr-postback.d.ts.map +1 -0
- package/dist/lib/pr-postback.js +44 -0
- package/dist/lib/pr-postback.js.map +1 -0
- package/dist/lib/pr-postback.test.d.ts +9 -0
- package/dist/lib/pr-postback.test.d.ts.map +1 -0
- package/dist/lib/pr-postback.test.js +196 -0
- package/dist/lib/pr-postback.test.js.map +1 -0
- package/dist/lib/pr-token.d.ts +15 -0
- package/dist/lib/pr-token.d.ts.map +1 -0
- package/dist/lib/pr-token.js +22 -0
- package/dist/lib/pr-token.js.map +1 -0
- package/dist/lib/pr-token.test.d.ts +2 -0
- package/dist/lib/pr-token.test.d.ts.map +1 -0
- package/dist/lib/pr-token.test.js +25 -0
- package/dist/lib/pr-token.test.js.map +1 -0
- 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 @@
|
|
|
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"}
|
package/dist/lib/oauth.test.js
CHANGED
|
@@ -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":"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,
|
|
1
|
+
{"version":3,"file":"oauth.test.js","sourceRoot":"","sources":["../../src/lib/oauth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|