@alwaysmeticulous/cli 2.306.0 → 2.308.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/command-utils/common-options.js +4 -1
- package/dist/command-utils/common-options.js.map +1 -1
- package/dist/command-utils/detect-upload-mode.js +4 -1
- package/dist/command-utils/detect-upload-mode.js.map +1 -1
- package/dist/command-utils/detect-upload-mode.spec.js +4 -1
- package/dist/command-utils/detect-upload-mode.spec.js.map +1 -1
- package/dist/command-utils/download-session.utils.js +4 -1
- package/dist/command-utils/download-session.utils.js.map +1 -1
- package/dist/command-utils/json-args.js +4 -1
- package/dist/command-utils/json-args.js.map +1 -1
- package/dist/command-utils/json-args.spec.js +4 -1
- package/dist/command-utils/json-args.spec.js.map +1 -1
- package/dist/command-utils/parse-container-env.js +4 -1
- package/dist/command-utils/parse-container-env.js.map +1 -1
- package/dist/command-utils/parse-rewrites.js +4 -1
- package/dist/command-utils/parse-rewrites.js.map +1 -1
- package/dist/command-utils/print-json.js +4 -1
- package/dist/command-utils/print-json.js.map +1 -1
- package/dist/command-utils/sentry.utils.js +4 -1
- package/dist/command-utils/sentry.utils.js.map +1 -1
- package/dist/commands/agent/build-git-options.js +4 -1
- package/dist/commands/agent/build-git-options.js.map +1 -1
- package/dist/commands/agent/build-git-options.spec.js +4 -1
- package/dist/commands/agent/build-git-options.spec.js.map +1 -1
- package/dist/commands/agent/index.js +10 -7
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/js-coverage-diff.command.js +4 -1
- package/dist/commands/agent/js-coverage-diff.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.d.ts +5 -0
- package/dist/commands/agent/js-coverage.command.d.ts.map +1 -1
- package/dist/commands/agent/js-coverage.command.js +122 -23
- package/dist/commands/agent/js-coverage.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.spec.js +50 -1
- package/dist/commands/agent/js-coverage.command.spec.js.map +1 -1
- package/dist/commands/agent/screenshot-dom-diff.command.d.ts.map +1 -1
- package/dist/commands/agent/screenshot-dom-diff.command.js +5 -2
- package/dist/commands/agent/screenshot-dom-diff.command.js.map +1 -1
- package/dist/commands/agent/screenshot-image-files.command.d.ts.map +1 -1
- package/dist/commands/agent/screenshot-image-files.command.js +5 -2
- package/dist/commands/agent/screenshot-image-files.command.js.map +1 -1
- package/dist/commands/agent/screenshot-image.command.d.ts.map +1 -1
- package/dist/commands/agent/screenshot-image.command.js +5 -2
- package/dist/commands/agent/screenshot-image.command.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.d.ts +4 -1
- package/dist/commands/agent/test-run-diffs.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.js +88 -30
- package/dist/commands/agent/test-run-diffs.command.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.spec.js +95 -3
- package/dist/commands/agent/test-run-diffs.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.d.ts +19 -27
- package/dist/commands/agent/test-run-diffs.utils.d.ts.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.js +42 -34
- package/dist/commands/agent/test-run-diffs.utils.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.spec.js +96 -66
- package/dist/commands/agent/test-run-diffs.utils.spec.js.map +1 -1
- package/dist/commands/agent/test-run-for-commit.command.d.ts +1 -0
- package/dist/commands/agent/test-run-for-commit.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-for-commit.command.js +13 -11
- package/dist/commands/agent/test-run-for-commit.command.js.map +1 -1
- package/dist/commands/agent/timeline.command.js +4 -1
- package/dist/commands/agent/timeline.command.js.map +1 -1
- package/dist/commands/agent/timeline.command.spec.js +4 -1
- package/dist/commands/agent/timeline.command.spec.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.d.ts +1 -0
- package/dist/commands/agent/trigger-test-run.command.d.ts.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.js +10 -5
- package/dist/commands/agent/trigger-test-run.command.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.spec.js +4 -1
- package/dist/commands/agent/trigger-test-run.command.spec.js.map +1 -1
- package/dist/commands/agent/upload-build.command.js +5 -2
- package/dist/commands/agent/upload-build.command.js.map +1 -1
- package/dist/commands/all-commands.js +4 -1
- package/dist/commands/all-commands.js.map +1 -1
- package/dist/commands/auth/__tests__/get-project.command.spec.d.ts +2 -0
- package/dist/commands/auth/__tests__/get-project.command.spec.d.ts.map +1 -0
- package/dist/commands/auth/__tests__/get-project.command.spec.js +72 -0
- package/dist/commands/auth/__tests__/get-project.command.spec.js.map +1 -0
- package/dist/commands/auth/__tests__/list-projects.command.spec.js +4 -1
- package/dist/commands/auth/__tests__/list-projects.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/login.command.spec.js +15 -28
- package/dist/commands/auth/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/logout.command.spec.js +5 -5
- package/dist/commands/auth/__tests__/logout.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/set-project.command.spec.d.ts +2 -0
- package/dist/commands/auth/__tests__/set-project.command.spec.d.ts.map +1 -0
- package/dist/commands/auth/__tests__/set-project.command.spec.js +60 -0
- package/dist/commands/auth/__tests__/set-project.command.spec.js.map +1 -0
- package/dist/commands/auth/__tests__/whoami.command.spec.js +18 -7
- package/dist/commands/auth/__tests__/whoami.command.spec.js.map +1 -1
- package/dist/commands/auth/get-project.command.d.ts +10 -0
- package/dist/commands/auth/get-project.command.d.ts.map +1 -0
- package/dist/commands/auth/get-project.command.js +49 -0
- package/dist/commands/auth/get-project.command.js.map +1 -0
- package/dist/commands/auth/index.js +6 -3
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/list-projects.command.js +4 -1
- package/dist/commands/auth/list-projects.command.js.map +1 -1
- package/dist/commands/auth/login.command.d.ts.map +1 -1
- package/dist/commands/auth/login.command.js +11 -23
- package/dist/commands/auth/login.command.js.map +1 -1
- package/dist/commands/auth/logout.command.d.ts.map +1 -1
- package/dist/commands/auth/logout.command.js +8 -3
- package/dist/commands/auth/logout.command.js.map +1 -1
- package/dist/commands/auth/set-project.command.js +4 -1
- package/dist/commands/auth/set-project.command.js.map +1 -1
- package/dist/commands/auth/whoami.command.d.ts.map +1 -1
- package/dist/commands/auth/whoami.command.js +12 -21
- package/dist/commands/auth/whoami.command.js.map +1 -1
- package/dist/commands/ci/__tests__/session-filter.utils.spec.d.ts +2 -0
- package/dist/commands/ci/__tests__/session-filter.utils.spec.d.ts.map +1 -0
- package/dist/commands/ci/__tests__/session-filter.utils.spec.js +66 -0
- package/dist/commands/ci/__tests__/session-filter.utils.spec.js.map +1 -0
- package/dist/commands/ci/deprecated-trigger-options.js +4 -1
- package/dist/commands/ci/deprecated-trigger-options.js.map +1 -1
- package/dist/commands/ci/index.js +4 -1
- package/dist/commands/ci/index.js.map +1 -1
- package/dist/commands/ci/prepare.command.js +4 -1
- package/dist/commands/ci/prepare.command.js.map +1 -1
- package/dist/commands/ci/resolve-git-options.js +4 -1
- package/dist/commands/ci/resolve-git-options.js.map +1 -1
- package/dist/commands/ci/run-local.command.js +4 -1
- package/dist/commands/ci/run-local.command.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.d.ts +1 -0
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.d.ts.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js +31 -3
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js.map +1 -1
- package/dist/commands/ci/run.command.js +4 -1
- package/dist/commands/ci/run.command.js.map +1 -1
- package/dist/commands/ci/session-filter.utils.d.ts +25 -0
- package/dist/commands/ci/session-filter.utils.d.ts.map +1 -0
- package/dist/commands/ci/session-filter.utils.js +80 -0
- package/dist/commands/ci/session-filter.utils.js.map +1 -0
- package/dist/commands/ci/start-tunnel.command.js +4 -1
- package/dist/commands/ci/start-tunnel.command.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.core.js +5 -2
- package/dist/commands/ci/trigger-test-run.core.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.types.js +4 -1
- package/dist/commands/ci/trigger-test-run.types.js.map +1 -1
- package/dist/commands/ci/upload-asset-chunk.command.js +5 -2
- package/dist/commands/ci/upload-asset-chunk.command.js.map +1 -1
- package/dist/commands/ci/upload-assets.command.js +4 -1
- package/dist/commands/ci/upload-assets.command.js.map +1 -1
- package/dist/commands/ci/upload-container.command.js +4 -1
- package/dist/commands/ci/upload-container.command.js.map +1 -1
- package/dist/commands/debug/clean-workspaces.js +4 -1
- package/dist/commands/debug/clean-workspaces.js.map +1 -1
- package/dist/commands/debug/index.d.ts.map +1 -1
- package/dist/commands/debug/index.js +8 -8
- package/dist/commands/debug/index.js.map +1 -1
- package/dist/commands/debug/present-workspace.js +4 -1
- package/dist/commands/debug/present-workspace.js.map +1 -1
- package/dist/commands/debug/project-worktree.js +4 -1
- package/dist/commands/debug/project-worktree.js.map +1 -1
- package/dist/commands/deprecated-aliases.js +4 -1
- package/dist/commands/deprecated-aliases.js.map +1 -1
- package/dist/commands/download/index.js +4 -1
- package/dist/commands/download/index.js.map +1 -1
- package/dist/commands/download/replay.command.js +4 -1
- package/dist/commands/download/replay.command.js.map +1 -1
- package/dist/commands/download/session.command.js +4 -1
- package/dist/commands/download/session.command.js.map +1 -1
- package/dist/commands/download/test-run.command.js +4 -1
- package/dist/commands/download/test-run.command.js.map +1 -1
- package/dist/commands/local/get-edited-files.utils.js +4 -1
- package/dist/commands/local/get-edited-files.utils.js.map +1 -1
- package/dist/commands/local/get-edited-files.utils.spec.js +4 -1
- package/dist/commands/local/get-edited-files.utils.spec.js.map +1 -1
- package/dist/commands/local/index.js +4 -1
- package/dist/commands/local/index.js.map +1 -1
- package/dist/commands/local/relevant-sessions.command.js +5 -2
- package/dist/commands/local/relevant-sessions.command.js.map +1 -1
- package/dist/commands/project/index.js +4 -1
- package/dist/commands/project/index.js.map +1 -1
- package/dist/commands/project/show.command.js +5 -2
- package/dist/commands/project/show.command.js.map +1 -1
- package/dist/commands/project/upload-source.command.js +4 -1
- package/dist/commands/project/upload-source.command.js.map +1 -1
- package/dist/commands/record/__tests__/login.command.spec.js +7 -2
- package/dist/commands/record/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/record/__tests__/session.command.spec.js +7 -2
- package/dist/commands/record/__tests__/session.command.spec.js.map +1 -1
- package/dist/commands/record/index.js +4 -1
- package/dist/commands/record/index.js.map +1 -1
- package/dist/commands/record/login.command.js +5 -2
- package/dist/commands/record/login.command.js.map +1 -1
- package/dist/commands/record/session.command.js +5 -2
- package/dist/commands/record/session.command.js.map +1 -1
- package/dist/commands/replay-debugger.ui.js +4 -1
- package/dist/commands/replay-debugger.ui.js.map +1 -1
- package/dist/commands/replay.command.js +4 -1
- package/dist/commands/replay.command.js.map +1 -1
- package/dist/commands/schema.command.js +4 -1
- package/dist/commands/schema.command.js.map +1 -1
- package/dist/commands/schema.command.spec.js +4 -1
- package/dist/commands/schema.command.spec.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/main.js +4 -1
- package/dist/main.js.map +1 -1
- package/dist/utils/__tests__/handle-auth-failure.spec.js +4 -1
- package/dist/utils/__tests__/handle-auth-failure.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-project-identifier.spec.js +38 -31
- package/dist/utils/__tests__/resolve-project-identifier.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js +4 -1
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js.map +1 -1
- package/dist/utils/__tests__/select-project.spec.js +137 -46
- package/dist/utils/__tests__/select-project.spec.js.map +1 -1
- package/dist/utils/cli-user-error.js +4 -1
- package/dist/utils/cli-user-error.js.map +1 -1
- package/dist/utils/constants.js +4 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/environment.utils.js +4 -1
- package/dist/utils/environment.utils.js.map +1 -1
- package/dist/utils/format-coverage-ranges.js +4 -1
- package/dist/utils/format-coverage-ranges.js.map +1 -1
- package/dist/utils/handle-auth-failure.d.ts +1 -0
- package/dist/utils/handle-auth-failure.d.ts.map +1 -1
- package/dist/utils/handle-auth-failure.js +7 -3
- package/dist/utils/handle-auth-failure.js.map +1 -1
- package/dist/utils/out-of-date-client-error.js +4 -1
- package/dist/utils/out-of-date-client-error.js.map +1 -1
- package/dist/utils/resolve-project-identifier.d.ts +12 -10
- package/dist/utils/resolve-project-identifier.d.ts.map +1 -1
- package/dist/utils/resolve-project-identifier.js +31 -17
- package/dist/utils/resolve-project-identifier.js.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.d.ts +6 -2
- package/dist/utils/resolve-test-run-from-commit.d.ts.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.js +12 -8
- package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
- package/dist/utils/select-project.d.ts +37 -13
- package/dist/utils/select-project.d.ts.map +1 -1
- package/dist/utils/select-project.js +113 -40
- package/dist/utils/select-project.js.map +1 -1
- package/package.json +10 -10
- package/dist/commands/auth/unset-project.command.d.ts +0 -3
- package/dist/commands/auth/unset-project.command.d.ts.map +0 -1
- package/dist/commands/auth/unset-project.command.js +0 -24
- package/dist/commands/auth/unset-project.command.js.map +0 -1
|
@@ -1,19 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="70c20c11-cb70-5b2b-bc55-56149e6c15a3")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
5
|
const vitest_1 = require("vitest");
|
|
4
6
|
const cli_user_error_1 = require("../cli-user-error");
|
|
5
7
|
const select_project_1 = require("../select-project");
|
|
6
8
|
const mocks = vitest_1.vi.hoisted(() => ({
|
|
7
9
|
getOAuthProjects: vitest_1.vi.fn(),
|
|
8
|
-
|
|
10
|
+
setOAuthDefaultProject: vitest_1.vi.fn(),
|
|
11
|
+
getOAuthDefaultProject: vitest_1.vi.fn(),
|
|
12
|
+
isFetchError: vitest_1.vi.fn(() => false),
|
|
13
|
+
prompt: vitest_1.vi.fn(),
|
|
9
14
|
}));
|
|
10
15
|
vitest_1.vi.mock("@alwaysmeticulous/client", () => ({
|
|
11
16
|
getOAuthProjects: mocks.getOAuthProjects,
|
|
12
|
-
|
|
17
|
+
setOAuthDefaultProject: mocks.setOAuthDefaultProject,
|
|
18
|
+
getOAuthDefaultProject: mocks.getOAuthDefaultProject,
|
|
19
|
+
isFetchError: mocks.isFetchError,
|
|
13
20
|
}));
|
|
21
|
+
// The backend resolves the identifier and returns the resolved project; model
|
|
22
|
+
// that here.
|
|
23
|
+
const resolved = (org, name, id) => ({
|
|
24
|
+
projectId: id,
|
|
25
|
+
name,
|
|
26
|
+
organization: { id: `${org}-id`, name: org },
|
|
27
|
+
});
|
|
14
28
|
vitest_1.vi.mock("@alwaysmeticulous/common", () => ({
|
|
15
29
|
logNotice: vitest_1.vi.fn(),
|
|
16
30
|
}));
|
|
31
|
+
vitest_1.vi.mock("inquirer", () => ({ default: { prompt: mocks.prompt } }));
|
|
17
32
|
const project = (org, name, id) => ({
|
|
18
33
|
id,
|
|
19
34
|
name,
|
|
@@ -24,54 +39,43 @@ const fakeClient = {};
|
|
|
24
39
|
(0, vitest_1.beforeEach)(() => {
|
|
25
40
|
vitest_1.vi.clearAllMocks();
|
|
26
41
|
});
|
|
27
|
-
(0, vitest_1.it)("
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
]);
|
|
42
|
+
(0, vitest_1.it)("sends an explicit identifier to the backend verbatim (not matched client-side)", async () => {
|
|
43
|
+
// A bare name, id, or slug all go straight to the backend, which resolves
|
|
44
|
+
// flexibly and returns the resolved project.
|
|
45
|
+
mocks.setOAuthDefaultProject.mockResolvedValue(resolved("OrgB", "App2", "id-2"));
|
|
32
46
|
const result = await (0, select_project_1.selectAndStoreProject)({
|
|
33
47
|
client: fakeClient,
|
|
34
|
-
project: "
|
|
48
|
+
project: "App2",
|
|
35
49
|
});
|
|
36
50
|
(0, vitest_1.expect)(result).toBe("OrgB/App2");
|
|
37
|
-
(0, vitest_1.expect)(mocks.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
});
|
|
51
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).toHaveBeenCalledWith(fakeClient, "App2");
|
|
52
|
+
// No client-side project listing for an explicit identifier.
|
|
53
|
+
(0, vitest_1.expect)(mocks.getOAuthProjects).not.toHaveBeenCalled();
|
|
41
54
|
});
|
|
42
|
-
(0, vitest_1.it)("trims surrounding whitespace from the provided
|
|
43
|
-
mocks.
|
|
55
|
+
(0, vitest_1.it)("trims surrounding whitespace from the provided identifier", async () => {
|
|
56
|
+
mocks.setOAuthDefaultProject.mockResolvedValue(resolved("OrgA", "App1", "id-1"));
|
|
44
57
|
const result = await (0, select_project_1.selectAndStoreProject)({
|
|
45
58
|
client: fakeClient,
|
|
46
59
|
project: " OrgA/App1 ",
|
|
47
60
|
});
|
|
48
61
|
(0, vitest_1.expect)(result).toBe("OrgA/App1");
|
|
62
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).toHaveBeenCalledWith(fakeClient, "OrgA/App1");
|
|
49
63
|
});
|
|
50
|
-
(0, vitest_1.it)("
|
|
51
|
-
mocks.
|
|
52
|
-
await (0, vitest_1.expect)((0, select_project_1.selectAndStoreProject)({
|
|
53
|
-
client: fakeClient,
|
|
54
|
-
project: "orga/app1",
|
|
55
|
-
})).rejects.toBeInstanceOf(cli_user_error_1.CliUserError);
|
|
56
|
-
(0, vitest_1.expect)(mocks.setStoredProject).not.toHaveBeenCalled();
|
|
57
|
-
});
|
|
58
|
-
(0, vitest_1.it)("throws with the available list when the slug is not found", async () => {
|
|
64
|
+
(0, vitest_1.it)("throws with the available list when the backend can't resolve the identifier", async () => {
|
|
65
|
+
mocks.setOAuthDefaultProject.mockRejectedValueOnce(new Error("not found"));
|
|
59
66
|
mocks.getOAuthProjects.mockResolvedValue([project("OrgA", "App1", "id-1")]);
|
|
60
67
|
await (0, vitest_1.expect)((0, select_project_1.selectAndStoreProject)({
|
|
61
68
|
client: fakeClient,
|
|
62
|
-
project: "
|
|
69
|
+
project: "Missing",
|
|
63
70
|
})).rejects.toThrow(/Available projects/);
|
|
64
71
|
});
|
|
65
|
-
(0, vitest_1.it)("auto-selects the only project when no
|
|
72
|
+
(0, vitest_1.it)("auto-selects the only project when no identifier is provided", async () => {
|
|
66
73
|
mocks.getOAuthProjects.mockResolvedValue([project("OrgA", "App1", "id-1")]);
|
|
67
74
|
const result = await (0, select_project_1.selectAndStoreProject)({
|
|
68
75
|
client: fakeClient,
|
|
69
76
|
});
|
|
70
77
|
(0, vitest_1.expect)(result).toBe("OrgA/App1");
|
|
71
|
-
(0, vitest_1.expect)(mocks.
|
|
72
|
-
project: "OrgA/App1",
|
|
73
|
-
projectId: "id-1",
|
|
74
|
-
});
|
|
78
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).toHaveBeenCalledWith(fakeClient, "id-1");
|
|
75
79
|
});
|
|
76
80
|
(0, vitest_1.it)("throws when no projects are accessible", async () => {
|
|
77
81
|
mocks.getOAuthProjects.mockResolvedValue([]);
|
|
@@ -89,35 +93,122 @@ const fakeClient = {};
|
|
|
89
93
|
(0, vitest_1.expect)(caught).toBeInstanceOf(cli_user_error_1.CliUserError);
|
|
90
94
|
(0, vitest_1.expect)(caught.severity).toBe("warn");
|
|
91
95
|
(0, vitest_1.expect)(caught.exitCode).toBe(1);
|
|
92
|
-
(0, vitest_1.expect)(mocks.
|
|
96
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).not.toHaveBeenCalled();
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
(0, vitest_1.describe)("selectProjectOnLogin", () => {
|
|
100
|
+
(0, vitest_1.beforeEach)(() => {
|
|
101
|
+
vitest_1.vi.clearAllMocks();
|
|
102
|
+
});
|
|
103
|
+
(0, vitest_1.it)("persists an explicit --project (resolved by the backend)", async () => {
|
|
104
|
+
mocks.setOAuthDefaultProject.mockResolvedValue(resolved("OrgB", "App2", "id-2"));
|
|
105
|
+
await (0, select_project_1.selectProjectOnLogin)({
|
|
106
|
+
client: fakeClient,
|
|
107
|
+
project: "OrgB/App2",
|
|
108
|
+
interactive: true,
|
|
109
|
+
});
|
|
110
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).toHaveBeenCalledWith(fakeClient, "OrgB/App2");
|
|
111
|
+
});
|
|
112
|
+
(0, vitest_1.it)("auto-selects and persists the sole project (no stored-default lookup needed)", async () => {
|
|
113
|
+
mocks.getOAuthProjects.mockResolvedValue([project("OrgA", "App1", "id-1")]);
|
|
114
|
+
await (0, select_project_1.selectProjectOnLogin)({ client: fakeClient, interactive: true });
|
|
115
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).toHaveBeenCalledWith(fakeClient, "id-1");
|
|
116
|
+
// Only >1-project accounts consult the stored default (to respect it);
|
|
117
|
+
// a sole project is selected directly.
|
|
118
|
+
(0, vitest_1.expect)(mocks.getOAuthDefaultProject).not.toHaveBeenCalled();
|
|
93
119
|
});
|
|
94
|
-
(0, vitest_1.it)("
|
|
120
|
+
(0, vitest_1.it)("respects an existing stored default (multi-project) without re-persisting", async () => {
|
|
95
121
|
mocks.getOAuthProjects.mockResolvedValue([
|
|
96
122
|
project("OrgA", "App1", "id-1"),
|
|
97
123
|
project("OrgB", "App2", "id-2"),
|
|
98
124
|
]);
|
|
99
|
-
|
|
100
|
-
client: fakeClient,
|
|
101
|
-
allowInteractivePrompt: false,
|
|
102
|
-
fallbackToProject: "OrgB/App2",
|
|
103
|
-
});
|
|
104
|
-
(0, vitest_1.expect)(result).toBe("OrgB/App2");
|
|
105
|
-
(0, vitest_1.expect)(mocks.setStoredProject).toHaveBeenCalledWith({
|
|
106
|
-
project: "OrgB/App2",
|
|
125
|
+
mocks.getOAuthDefaultProject.mockResolvedValue({
|
|
107
126
|
projectId: "id-2",
|
|
127
|
+
name: "App2",
|
|
128
|
+
organization: { id: "OrgB-id", name: "OrgB" },
|
|
108
129
|
});
|
|
130
|
+
await (0, select_project_1.selectProjectOnLogin)({ client: fakeClient, interactive: false });
|
|
131
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).not.toHaveBeenCalled();
|
|
109
132
|
});
|
|
110
|
-
(0, vitest_1.it)("
|
|
133
|
+
(0, vitest_1.it)("succeeds non-interactively when a default already exists, even with multiple projects", async () => {
|
|
111
134
|
mocks.getOAuthProjects.mockResolvedValue([
|
|
112
135
|
project("OrgA", "App1", "id-1"),
|
|
113
136
|
project("OrgB", "App2", "id-2"),
|
|
114
137
|
]);
|
|
115
|
-
|
|
138
|
+
mocks.getOAuthDefaultProject.mockResolvedValue({
|
|
139
|
+
projectId: "id-1",
|
|
140
|
+
name: "App1",
|
|
141
|
+
organization: { id: "OrgA-id", name: "OrgA" },
|
|
142
|
+
});
|
|
143
|
+
await (0, vitest_1.expect)((0, select_project_1.selectProjectOnLogin)({ client: fakeClient, interactive: false })).resolves.toBeUndefined();
|
|
144
|
+
});
|
|
145
|
+
(0, vitest_1.it)("throws headlessly when several projects exist and no default is set", async () => {
|
|
146
|
+
mocks.getOAuthProjects.mockResolvedValue([
|
|
147
|
+
project("OrgA", "App1", "id-1"),
|
|
148
|
+
project("OrgB", "App2", "id-2"),
|
|
149
|
+
]);
|
|
150
|
+
mocks.getOAuthDefaultProject.mockResolvedValue({ projectId: null });
|
|
151
|
+
const caught = await (0, select_project_1.selectProjectOnLogin)({
|
|
116
152
|
client: fakeClient,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
(0, vitest_1.expect)(mocks.
|
|
153
|
+
interactive: false,
|
|
154
|
+
}).catch((error) => error);
|
|
155
|
+
(0, vitest_1.expect)(caught).toBeInstanceOf(cli_user_error_1.CliUserError);
|
|
156
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).not.toHaveBeenCalled();
|
|
157
|
+
});
|
|
158
|
+
(0, vitest_1.it)("prompts and persists when interactive with several projects and no default", async () => {
|
|
159
|
+
mocks.getOAuthProjects.mockResolvedValue([
|
|
160
|
+
project("OrgA", "App1", "id-1"),
|
|
161
|
+
project("OrgB", "App2", "id-2"),
|
|
162
|
+
]);
|
|
163
|
+
mocks.getOAuthDefaultProject.mockResolvedValue({ projectId: null });
|
|
164
|
+
mocks.prompt.mockResolvedValue({ projectId: "id-2" });
|
|
165
|
+
await (0, select_project_1.selectProjectOnLogin)({ client: fakeClient, interactive: true });
|
|
166
|
+
(0, vitest_1.expect)(mocks.setOAuthDefaultProject).toHaveBeenCalledWith(fakeClient, "id-2");
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
(0, vitest_1.describe)("formatProjectSlug", () => {
|
|
170
|
+
(0, vitest_1.it)("formats organization/name when both are present", () => {
|
|
171
|
+
(0, vitest_1.expect)((0, select_project_1.formatProjectSlug)({
|
|
172
|
+
projectId: "id-1",
|
|
173
|
+
name: "App1",
|
|
174
|
+
organization: { id: "org-1", name: "OrgA" },
|
|
175
|
+
})).toBe("OrgA/App1");
|
|
176
|
+
});
|
|
177
|
+
(0, vitest_1.it)("falls back to the bare id when name/organization are absent", () => {
|
|
178
|
+
(0, vitest_1.expect)((0, select_project_1.formatProjectSlug)({ projectId: "id-1" })).toBe("id-1");
|
|
179
|
+
});
|
|
180
|
+
(0, vitest_1.it)("falls back to an empty string when nothing is set", () => {
|
|
181
|
+
(0, vitest_1.expect)((0, select_project_1.formatProjectSlug)({ projectId: null })).toBe("");
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
(0, vitest_1.describe)("fetchAccessibleProjects", () => {
|
|
185
|
+
(0, vitest_1.beforeEach)(() => {
|
|
186
|
+
vitest_1.vi.clearAllMocks();
|
|
187
|
+
});
|
|
188
|
+
(0, vitest_1.it)("returns projects sorted alphabetically by organization/project slug (case-insensitive)", async () => {
|
|
189
|
+
mocks.getOAuthProjects.mockResolvedValue([
|
|
190
|
+
project("orgB", "App1", "id-b1"),
|
|
191
|
+
project("OrgA", "Zeta", "id-az"),
|
|
192
|
+
project("OrgA", "alpha", "id-aa"),
|
|
193
|
+
project("orgB", "app2", "id-b2"),
|
|
194
|
+
]);
|
|
195
|
+
const result = await (0, select_project_1.fetchAccessibleProjects)(fakeClient);
|
|
196
|
+
(0, vitest_1.expect)(result.map((p) => `${p.organization.name}/${p.name}`)).toEqual([
|
|
197
|
+
"OrgA/alpha",
|
|
198
|
+
"OrgA/Zeta",
|
|
199
|
+
"orgB/App1",
|
|
200
|
+
"orgB/app2",
|
|
201
|
+
]);
|
|
202
|
+
});
|
|
203
|
+
(0, vitest_1.it)("does not mutate the array returned by the client", async () => {
|
|
204
|
+
const original = [
|
|
205
|
+
project("orgB", "App1", "id-b1"),
|
|
206
|
+
project("OrgA", "alpha", "id-aa"),
|
|
207
|
+
];
|
|
208
|
+
mocks.getOAuthProjects.mockResolvedValue(original);
|
|
209
|
+
await (0, select_project_1.fetchAccessibleProjects)(fakeClient);
|
|
210
|
+
(0, vitest_1.expect)(original.map((p) => p.id)).toEqual(["id-b1", "id-aa"]);
|
|
121
211
|
});
|
|
122
212
|
});
|
|
123
|
-
//# sourceMappingURL=select-project.spec.js.map
|
|
213
|
+
//# sourceMappingURL=select-project.spec.js.map
|
|
214
|
+
//# debugId=70c20c11-cb70-5b2b-bc55-56149e6c15a3
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-project.spec.js","
|
|
1
|
+
{"version":3,"file":"select-project.spec.js","sources":["../../../src/utils/__tests__/select-project.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"70c20c11-cb70-5b2b-bc55-56149e6c15a3"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e721f599-90d6-5a66-8b3a-0c8e243f28ee")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
5
|
exports.CliUserError = void 0;
|
|
4
6
|
class CliUserError extends Error {
|
|
@@ -12,4 +14,5 @@ class CliUserError extends Error {
|
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
16
|
exports.CliUserError = CliUserError;
|
|
15
|
-
//# sourceMappingURL=cli-user-error.js.map
|
|
17
|
+
//# sourceMappingURL=cli-user-error.js.map
|
|
18
|
+
//# debugId=e721f599-90d6-5a66-8b3a-0c8e243f28ee
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-user-error.js","
|
|
1
|
+
{"version":3,"file":"cli-user-error.js","sources":["../../src/utils/cli-user-error.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAaA,MAAa,YAAa,SAAQ,KAAK;IAC5B,QAAQ,CAAS;IACjB,QAAQ,CAAuB;IAExC,YACE,OAAe,EACf,QAAQ,GAAG,CAAC,EACZ,WAAiC,OAAO;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAdD,oCAcC","debugId":"e721f599-90d6-5a66-8b3a-0c8e243f28ee"}
|
package/dist/utils/constants.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9608f336-62b9-5c89-a5c8-126bdea85d19")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
5
|
exports.BACKEND_RECORDING_SNIPPET_PATH = exports.WORKER_RECORDING_SNIPPET_PATH = exports.RECORDING_SNIPPET_PATH = void 0;
|
|
4
6
|
exports.RECORDING_SNIPPET_PATH = "v1/meticulous.js";
|
|
5
7
|
exports.WORKER_RECORDING_SNIPPET_PATH = "record/v1/worker-network-recorder.bundle.js";
|
|
6
8
|
exports.BACKEND_RECORDING_SNIPPET_PATH = "backend-record-js/v1/manual-init.bundle.js";
|
|
7
|
-
//# sourceMappingURL=constants.js.map
|
|
9
|
+
//# sourceMappingURL=constants.js.map
|
|
10
|
+
//# debugId=9608f336-62b9-5c89-a5c8-126bdea85d19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../src/utils/constants.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAa,QAAA,sBAAsB,GAAG,kBAAkB,CAAC;AAC5C,QAAA,6BAA6B,GACxC,6CAA6C,CAAC;AACnC,QAAA,8BAA8B,GACzC,4CAA4C,CAAC","debugId":"9608f336-62b9-5c89-a5c8-126bdea85d19"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6f06c51f-e9a0-562e-be65-aaf80b95c859")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
5
|
exports.getEnvironment = void 0;
|
|
4
6
|
const ci_info_1 = require("ci-info");
|
|
@@ -14,4 +16,5 @@ const getEnvironment = () => {
|
|
|
14
16
|
};
|
|
15
17
|
};
|
|
16
18
|
exports.getEnvironment = getEnvironment;
|
|
17
|
-
//# sourceMappingURL=environment.utils.js.map
|
|
19
|
+
//# sourceMappingURL=environment.utils.js.map
|
|
20
|
+
//# debugId=6f06c51f-e9a0-562e-be65-aaf80b95c859
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.utils.js","
|
|
1
|
+
{"version":3,"file":"environment.utils.js","sources":["../../src/utils/environment.utils.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,qCAA+C;AAaxC,MAAM,cAAc,GAAG,GAAgB,EAAE;IAC9C,IAAI,CAAC,cAAI,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,EAAE,EAAE;YACF,IAAI,EAAE,cAAM;SACb;KACF,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,cAAc,kBAWzB","debugId":"6f06c51f-e9a0-562e-be65-aaf80b95c859"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="113db5c7-d290-522f-ae19-a67ddabc8608")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
5
|
exports.formatCoverageRanges = void 0;
|
|
4
6
|
/**
|
|
@@ -10,4 +12,5 @@ const formatCoverageRanges = (ranges) => ranges
|
|
|
10
12
|
.map(([start, end]) => (start === end ? `${start}` : `${start}-${end}`))
|
|
11
13
|
.join(";");
|
|
12
14
|
exports.formatCoverageRanges = formatCoverageRanges;
|
|
13
|
-
//# sourceMappingURL=format-coverage-ranges.js.map
|
|
15
|
+
//# sourceMappingURL=format-coverage-ranges.js.map
|
|
16
|
+
//# debugId=113db5c7-d290-522f-ae19-a67ddabc8608
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-coverage-ranges.js","
|
|
1
|
+
{"version":3,"file":"format-coverage-ranges.js","sources":["../../src/utils/format-coverage-ranges.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAEA;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAAC,MAAsB,EAAU,EAAE,CACrE,MAAM;KACH,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;KACvE,IAAI,CAAC,GAAG,CAAC,CAAC;AAHF,QAAA,oBAAoB,wBAGlB","debugId":"113db5c7-d290-522f-ae19-a67ddabc8608"}
|
|
@@ -15,4 +15,5 @@
|
|
|
15
15
|
* try { ... } catch (error) { handleAuthFailure(error); throw error; }
|
|
16
16
|
*/
|
|
17
17
|
export declare const handleAuthFailure: (error: unknown) => false;
|
|
18
|
+
export declare const extractServerMessage: (data: unknown) => string | null;
|
|
18
19
|
//# sourceMappingURL=handle-auth-failure.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-auth-failure.d.ts","sourceRoot":"","sources":["../../src/utils/handle-auth-failure.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,UAAW,OAAO,KAAG,KA0BlD,CAAC"}
|
|
1
|
+
{"version":3,"file":"handle-auth-failure.d.ts","sourceRoot":"","sources":["../../src/utils/handle-auth-failure.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,UAAW,OAAO,KAAG,KA0BlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,OAAO,KAAG,MAAM,GAAG,IAc7D,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="af5c9326-089d-5aeb-a695-cc7891267cdd")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleAuthFailure = void 0;
|
|
5
|
+
exports.extractServerMessage = exports.handleAuthFailure = void 0;
|
|
4
6
|
const client_1 = require("@alwaysmeticulous/client");
|
|
5
7
|
const cli_user_error_1 = require("./cli-user-error");
|
|
6
8
|
/**
|
|
@@ -34,7 +36,7 @@ const handleAuthFailure = (error) => {
|
|
|
34
36
|
throw new cli_user_error_1.CliUserError("Your stored OAuth token has expired and could not be refreshed. " +
|
|
35
37
|
"Re-run the command to start a fresh login.");
|
|
36
38
|
}
|
|
37
|
-
const serverMessage = extractServerMessage(error.response?.data);
|
|
39
|
+
const serverMessage = (0, exports.extractServerMessage)(error.response?.data);
|
|
38
40
|
const detail = serverMessage ? `: ${serverMessage}` : ".";
|
|
39
41
|
throw new cli_user_error_1.CliUserError(`Authentication failed (HTTP ${status})${detail}\n` +
|
|
40
42
|
"If the token is stale, run `meticulous auth logout` and re-run the command.");
|
|
@@ -55,4 +57,6 @@ const extractServerMessage = (data) => {
|
|
|
55
57
|
}
|
|
56
58
|
return null;
|
|
57
59
|
};
|
|
58
|
-
|
|
60
|
+
exports.extractServerMessage = extractServerMessage;
|
|
61
|
+
//# sourceMappingURL=handle-auth-failure.js.map
|
|
62
|
+
//# debugId=af5c9326-089d-5aeb-a695-cc7891267cdd
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-auth-failure.js","
|
|
1
|
+
{"version":3,"file":"handle-auth-failure.js","sources":["../../src/utils/handle-auth-failure.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,qDAKkC;AAClC,qDAAgD;AAEhD;;;;;;;;;;;;;;;GAeG;AACI,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAS,EAAE;IACzD,IAAI,CAAC,IAAA,qBAAY,EAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IACtC,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,6BAAoB,GAAE,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,qBAAY,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAElE,IAAI,OAAO,EAAE,CAAC;QACZ,IAAA,yBAAgB,GAAE,CAAC;QACnB,MAAM,IAAI,6BAAY,CACpB,kEAAkE;YAChE,4CAA4C,CAC/C,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,4BAAoB,EAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,MAAM,IAAI,6BAAY,CACpB,+BAA+B,MAAM,IAAI,MAAM,IAAI;QACjD,6EAA6E,CAChF,CAAC;AACJ,CAAC,CAAC;AA1BW,QAAA,iBAAiB,qBA0B5B;AAEK,MAAM,oBAAoB,GAAG,CAAC,IAAa,EAAiB,EAAE;IACnE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAI,IAA8B,CAAC,OAAO,CAAC;QACxD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAdW,QAAA,oBAAoB,wBAc/B","debugId":"af5c9326-089d-5aeb-a695-cc7891267cdd"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0aca0fb3-0d1b-5eb2-9571-239dbe63bea6")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
5
|
exports.OutOfDateCLIError = exports.isOutOfDateClientError = void 0;
|
|
4
6
|
const isOutOfDateClientError = (error) => {
|
|
@@ -12,4 +14,5 @@ class OutOfDateCLIError extends Error {
|
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
16
|
exports.OutOfDateCLIError = OutOfDateCLIError;
|
|
15
|
-
//# sourceMappingURL=out-of-date-client-error.js.map
|
|
17
|
+
//# sourceMappingURL=out-of-date-client-error.js.map
|
|
18
|
+
//# debugId=0aca0fb3-0d1b-5eb2-9571-239dbe63bea6
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"out-of-date-client-error.js","
|
|
1
|
+
{"version":3,"file":"out-of-date-client-error.js","sources":["../../src/utils/out-of-date-client-error.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAEO,MAAM,sBAAsB,GAAG,CACpC,KAAc,EACiB,EAAE;IACjC,OAAQ,KAAe,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACrD,CAAC,CAAC;AAJW,QAAA,sBAAsB,0BAIjC;AAEF,MAAa,iBAAkB,SAAQ,KAAK;IAC1C;QACE,KAAK,CACH,2IAA2I,CAC5I,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAPD,8CAOC","debugId":"0aca0fb3-0d1b-5eb2-9571-239dbe63bea6"}
|
|
@@ -3,22 +3,24 @@
|
|
|
3
3
|
* resolved API token.
|
|
4
4
|
*
|
|
5
5
|
* - OAuth tokens are user-scoped (not project-scoped), so they require a
|
|
6
|
-
*
|
|
6
|
+
* default project — set via `meticulous auth set-project` or the web app's
|
|
7
|
+
* user settings, resolved from the backend (not a local file: it needs to
|
|
8
|
+
* be consistent across machines and visible to the hosted MCP server).
|
|
7
9
|
* - Project-scoped API tokens already pin the project, so no extra
|
|
8
10
|
* identifier is needed.
|
|
9
11
|
*
|
|
10
|
-
* Throws `CliUserError` when an OAuth caller has no project
|
|
12
|
+
* Throws `CliUserError` when an OAuth caller has no default project. The
|
|
11
13
|
* top-level `wrapHandler` catches it and exits non-zero with the message.
|
|
12
14
|
*/
|
|
13
|
-
export declare const resolveProjectIdentifier: (apiToken: string) => {
|
|
15
|
+
export declare const resolveProjectIdentifier: (apiToken: string) => Promise<{
|
|
14
16
|
projectId?: string;
|
|
15
|
-
}
|
|
17
|
+
}>;
|
|
16
18
|
/**
|
|
17
|
-
*
|
|
18
|
-
* `
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* Resolves the single project a project-scoped API token is bound to, via the
|
|
20
|
+
* `token-info` endpoint, as an `"organization/name"` slug. Best-effort: any
|
|
21
|
+
* failure (network, older backend without the endpoint, etc.) resolves to
|
|
22
|
+
* `null` rather than throwing — used for informational display (`whoami`,
|
|
23
|
+
* `get-project`), where a missing project name shouldn't fail the command.
|
|
22
24
|
*/
|
|
23
|
-
export declare const
|
|
25
|
+
export declare const resolvePinnedProjectSlug: (apiToken: string) => Promise<string | null>;
|
|
24
26
|
//# sourceMappingURL=resolve-project-identifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-project-identifier.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-project-identifier.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-project-identifier.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-project-identifier.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,aACzB,MAAM,KACf,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBhC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,aACzB,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAQvB,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0129f18e-5e5d-5b0a-89b3-e66803d56a18")}catch(e){}}();
|
|
3
|
+
|
|
2
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
5
|
+
exports.resolvePinnedProjectSlug = exports.resolveProjectIdentifier = void 0;
|
|
6
|
+
const common_1 = require("@alwaysmeticulous/common");
|
|
4
7
|
const client_1 = require("@alwaysmeticulous/client");
|
|
5
8
|
const cli_user_error_1 = require("./cli-user-error");
|
|
6
9
|
/**
|
|
@@ -8,37 +11,48 @@ const cli_user_error_1 = require("./cli-user-error");
|
|
|
8
11
|
* resolved API token.
|
|
9
12
|
*
|
|
10
13
|
* - OAuth tokens are user-scoped (not project-scoped), so they require a
|
|
11
|
-
*
|
|
14
|
+
* default project — set via `meticulous auth set-project` or the web app's
|
|
15
|
+
* user settings, resolved from the backend (not a local file: it needs to
|
|
16
|
+
* be consistent across machines and visible to the hosted MCP server).
|
|
12
17
|
* - Project-scoped API tokens already pin the project, so no extra
|
|
13
18
|
* identifier is needed.
|
|
14
19
|
*
|
|
15
|
-
* Throws `CliUserError` when an OAuth caller has no project
|
|
20
|
+
* Throws `CliUserError` when an OAuth caller has no default project. The
|
|
16
21
|
* top-level `wrapHandler` catches it and exits non-zero with the message.
|
|
17
22
|
*/
|
|
18
|
-
const resolveProjectIdentifier = (apiToken) => {
|
|
23
|
+
const resolveProjectIdentifier = async (apiToken) => {
|
|
19
24
|
if (!(0, client_1.isOAuthJwt)(apiToken)) {
|
|
20
25
|
return {};
|
|
21
26
|
}
|
|
22
|
-
const
|
|
27
|
+
const logger = (0, common_1.initLogger)();
|
|
28
|
+
// The legacy `selected-project.json` migration runs in the shared OAuth
|
|
29
|
+
// token-init path (`resolveApiTokenWithOAuth`), so by the time we resolve the
|
|
30
|
+
// default here it has already been migrated if it was present.
|
|
31
|
+
const projectId = await (0, client_1.resolveDefaultProjectId)(apiToken, logger);
|
|
23
32
|
if (!projectId) {
|
|
24
|
-
throw new cli_user_error_1.CliUserError("No project
|
|
33
|
+
throw new cli_user_error_1.CliUserError("No default project set. Run `meticulous auth set-project` to choose " +
|
|
25
34
|
"one before running OAuth-authenticated commands.");
|
|
26
35
|
}
|
|
27
36
|
return { projectId };
|
|
28
37
|
};
|
|
29
38
|
exports.resolveProjectIdentifier = resolveProjectIdentifier;
|
|
30
39
|
/**
|
|
31
|
-
*
|
|
32
|
-
* `
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
40
|
+
* Resolves the single project a project-scoped API token is bound to, via the
|
|
41
|
+
* `token-info` endpoint, as an `"organization/name"` slug. Best-effort: any
|
|
42
|
+
* failure (network, older backend without the endpoint, etc.) resolves to
|
|
43
|
+
* `null` rather than throwing — used for informational display (`whoami`,
|
|
44
|
+
* `get-project`), where a missing project name shouldn't fail the command.
|
|
36
45
|
*/
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
const resolvePinnedProjectSlug = async (apiToken) => {
|
|
47
|
+
try {
|
|
48
|
+
const client = (0, client_1.createClient)({ apiToken });
|
|
49
|
+
const project = await (0, client_1.getProject)(client);
|
|
50
|
+
return project ? `${project.organization.name}/${project.name}` : null;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
40
54
|
}
|
|
41
|
-
return (0, client_1.getStoredProjectId)() ?? undefined;
|
|
42
55
|
};
|
|
43
|
-
exports.
|
|
44
|
-
//# sourceMappingURL=resolve-project-identifier.js.map
|
|
56
|
+
exports.resolvePinnedProjectSlug = resolvePinnedProjectSlug;
|
|
57
|
+
//# sourceMappingURL=resolve-project-identifier.js.map
|
|
58
|
+
//# debugId=0129f18e-5e5d-5b0a-89b3-e66803d56a18
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-project-identifier.js","
|
|
1
|
+
{"version":3,"file":"resolve-project-identifier.js","sources":["../../src/utils/resolve-project-identifier.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,qDAAsD;AACtD,qDAKkC;AAClC,qDAAgD;AAEhD;;;;;;;;;;;;;GAaG;AACI,MAAM,wBAAwB,GAAG,KAAK,EAC3C,QAAgB,EACiB,EAAE;IACnC,IAAI,CAAC,IAAA,mBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC5B,wEAAwE;IACxE,8EAA8E;IAC9E,+DAA+D;IAC/D,MAAM,SAAS,GAAG,MAAM,IAAA,gCAAuB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,6BAAY,CACpB,sEAAsE;YACpE,kDAAkD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC,CAAC;AAnBW,QAAA,wBAAwB,4BAmBnC;AAEF;;;;;;GAMG;AACI,MAAM,wBAAwB,GAAG,KAAK,EAC3C,QAAgB,EACQ,EAAE;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAVW,QAAA,wBAAwB,4BAUnC","debugId":"0129f18e-5e5d-5b0a-89b3-e66803d56a18"}
|
|
@@ -42,16 +42,20 @@ export declare const assertTestRunComplete: (testRunId: string, status: TestRunS
|
|
|
42
42
|
* explicit `commitSha`, or the local checkout's HEAD when omitted), throwing a
|
|
43
43
|
* `CliUserError` when the commit can't be determined or no run matches it.
|
|
44
44
|
*
|
|
45
|
+
* `project` is a one-off override (resolved flexibly server-side); when
|
|
46
|
+
* omitted, project-scoped tokens use their own project and OAuth tokens fall
|
|
47
|
+
* back to the caller's stored default (`meticulous auth set-project`).
|
|
48
|
+
*
|
|
45
49
|
* Logs the resolved commit (see {@link logResolvedCommitSha}) and the test run
|
|
46
50
|
* id (under `--verbose`).
|
|
47
51
|
*/
|
|
48
|
-
export declare const resolveTestRunForCommitOrThrow: (client: MeticulousClient,
|
|
52
|
+
export declare const resolveTestRunForCommitOrThrow: (client: MeticulousClient, commitSha: string | undefined, project?: string) => Promise<ResolvedTestRun>;
|
|
49
53
|
/**
|
|
50
54
|
* Best-effort variant for auto-retry paths: returns `null` (rather than
|
|
51
55
|
* throwing) when the commit can't be determined, no project is selected, or no
|
|
52
56
|
* run matches, so the caller can fall back to its original behaviour.
|
|
53
57
|
*/
|
|
54
|
-
export declare const tryResolveTestRunForCommit: (client: MeticulousClient,
|
|
58
|
+
export declare const tryResolveTestRunForCommit: (client: MeticulousClient, commitSha: string | undefined, project?: string) => Promise<ResolvedTestRun | null>;
|
|
55
59
|
/**
|
|
56
60
|
* Polls a (possibly in-progress) test run until it reaches a terminal status,
|
|
57
61
|
* logging a single "Waiting for test run X to complete..." line when it starts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-test-run-from-commit.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-test-run-from-commit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-test-run-from-commit.d.ts","sourceRoot":"","sources":["../../src/utils/resolve-test-run-from-commit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAoBjE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,cACpB,MAAM,GAAG,SAAS,eAChB,MAAM,KAClB,OAAO,CAAC,IAAI,CAQd,CAAC;AAUF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,WAAY,aAAa,KAAG,OACd,CAAC;AAS/C,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,WAAY,aAAa,KAAG,OACf,CAAC;AAK5C,2EAA2E;AAC3E,eAAO,MAAM,eAAe,WAAY,aAAa,KAAG,OACf,CAAC;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,WAAY,aAAa,KAAG,OACnC,CAAC;AAEvB;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,cACrB,MAAM,UACT,aAAa,mBACO;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,KAClD,IAgBF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B,WACjC,gBAAgB,aACb,MAAM,GAAG,SAAS,YACnB,MAAM,KACf,OAAO,CAAC,eAAe,CAiBzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,WAC7B,gBAAgB,aACb,MAAM,GAAG,SAAS,YACnB,MAAM,KACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAmBhC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,WACzB,gBAAgB,aACb,MAAM,uBACU;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,KACtD,OAAO,CAAC,aAAa,CAsBvB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,WACxB,gBAAgB,aACb,MAAM,UACT,aAAa,iCAIlB;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,KACjD,OAAO,CAAC,aAAa,GAAG,IAAI,CAM9B,CAAC"}
|