@padua/cli 1.13.1 → 2.0.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/README.md +121 -6
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +85 -0
- package/dist/commands/doctor/index.js.map +1 -1
- package/dist/commands/doctor/mcp-checks.d.ts +36 -0
- package/dist/commands/doctor/mcp-checks.d.ts.map +1 -0
- package/dist/commands/doctor/mcp-checks.js +235 -0
- package/dist/commands/doctor/mcp-checks.js.map +1 -0
- package/dist/commands/doctor/mcp-service-checks.d.ts +35 -0
- package/dist/commands/doctor/mcp-service-checks.d.ts.map +1 -0
- package/dist/commands/doctor/mcp-service-checks.js +146 -0
- package/dist/commands/doctor/mcp-service-checks.js.map +1 -0
- package/dist/commands/doctor/types.d.ts +4 -1
- package/dist/commands/doctor/types.d.ts.map +1 -1
- package/dist/commands/doctor/types.js +1 -0
- package/dist/commands/doctor/types.js.map +1 -1
- package/dist/commands/login/index.d.ts +1 -1
- package/dist/commands/login/index.d.ts.map +1 -1
- package/dist/commands/login/index.js +44 -185
- package/dist/commands/login/index.js.map +1 -1
- package/dist/commands/login/mcp-steps.d.ts +38 -0
- package/dist/commands/login/mcp-steps.d.ts.map +1 -0
- package/dist/commands/login/mcp-steps.js +176 -0
- package/dist/commands/login/mcp-steps.js.map +1 -0
- package/dist/commands/login/orchestrator.d.ts +9 -0
- package/dist/commands/login/orchestrator.d.ts.map +1 -0
- package/dist/commands/login/orchestrator.js +251 -0
- package/dist/commands/login/orchestrator.js.map +1 -0
- package/dist/commands/login/types.d.ts +11 -0
- package/dist/commands/login/types.d.ts.map +1 -1
- package/dist/commands/login/types.js.map +1 -1
- package/dist/commands/status/aws-checks.d.ts +14 -0
- package/dist/commands/status/aws-checks.d.ts.map +1 -0
- package/dist/commands/status/aws-checks.js +145 -0
- package/dist/commands/status/aws-checks.js.map +1 -0
- package/dist/commands/status/checks.d.ts +9 -25
- package/dist/commands/status/checks.d.ts.map +1 -1
- package/dist/commands/status/checks.js +52 -254
- package/dist/commands/status/checks.js.map +1 -1
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +53 -1
- package/dist/commands/status/index.js.map +1 -1
- package/dist/commands/status/mcp-checks.d.ts +35 -0
- package/dist/commands/status/mcp-checks.d.ts.map +1 -0
- package/dist/commands/status/mcp-checks.js +175 -0
- package/dist/commands/status/mcp-checks.js.map +1 -0
- package/dist/commands/status/types.d.ts +34 -0
- package/dist/commands/status/types.d.ts.map +1 -1
- package/dist/mcp/config/index.d.ts +4 -0
- package/dist/mcp/config/index.d.ts.map +1 -0
- package/dist/mcp/config/index.js +14 -0
- package/dist/mcp/config/index.js.map +1 -0
- package/dist/mcp/config/loaders.d.ts +45 -0
- package/dist/mcp/config/loaders.d.ts.map +1 -0
- package/dist/mcp/config/loaders.js +149 -0
- package/dist/mcp/config/loaders.js.map +1 -0
- package/dist/mcp/config/types.d.ts +234 -0
- package/dist/mcp/config/types.d.ts.map +1 -0
- package/dist/mcp/config/types.js +45 -0
- package/dist/mcp/config/types.js.map +1 -0
- package/dist/mcp/daemon/entry-logic.d.ts +28 -0
- package/dist/mcp/daemon/entry-logic.d.ts.map +1 -0
- package/dist/mcp/daemon/entry-logic.js +82 -0
- package/dist/mcp/daemon/entry-logic.js.map +1 -0
- package/dist/mcp/daemon/entry.d.ts +8 -0
- package/dist/mcp/daemon/entry.d.ts.map +1 -0
- package/dist/mcp/daemon/entry.js +34 -0
- package/dist/mcp/daemon/entry.js.map +1 -0
- package/dist/mcp/daemon/fork.d.ts +21 -0
- package/dist/mcp/daemon/fork.d.ts.map +1 -0
- package/dist/mcp/daemon/fork.js +188 -0
- package/dist/mcp/daemon/fork.js.map +1 -0
- package/dist/mcp/daemon/health.d.ts +8 -0
- package/dist/mcp/daemon/health.d.ts.map +1 -0
- package/dist/mcp/daemon/health.js +50 -0
- package/dist/mcp/daemon/health.js.map +1 -0
- package/dist/mcp/daemon/index.d.ts +6 -0
- package/dist/mcp/daemon/index.d.ts.map +1 -0
- package/dist/mcp/daemon/index.js +22 -0
- package/dist/mcp/daemon/index.js.map +1 -0
- package/dist/mcp/daemon/types.d.ts +63 -0
- package/dist/mcp/daemon/types.d.ts.map +1 -0
- package/dist/mcp/daemon/types.js +18 -0
- package/dist/mcp/daemon/types.js.map +1 -0
- package/dist/mcp/errors/index.d.ts +3 -0
- package/dist/mcp/errors/index.d.ts.map +1 -0
- package/dist/mcp/errors/index.js +13 -0
- package/dist/mcp/errors/index.js.map +1 -0
- package/dist/mcp/errors/types.d.ts +83 -0
- package/dist/mcp/errors/types.d.ts.map +1 -0
- package/dist/mcp/errors/types.js +148 -0
- package/dist/mcp/errors/types.js.map +1 -0
- package/dist/mcp/providers/atlassian/auth.d.ts +34 -0
- package/dist/mcp/providers/atlassian/auth.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/auth.js +107 -0
- package/dist/mcp/providers/atlassian/auth.js.map +1 -0
- package/dist/mcp/providers/atlassian/client.d.ts +15 -0
- package/dist/mcp/providers/atlassian/client.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/client.js +38 -0
- package/dist/mcp/providers/atlassian/client.js.map +1 -0
- package/dist/mcp/providers/atlassian/index.d.ts +6 -0
- package/dist/mcp/providers/atlassian/index.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/index.js +11 -0
- package/dist/mcp/providers/atlassian/index.js.map +1 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/index.d.ts +17 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/index.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/index.js +29 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/index.js.map +1 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.d.ts +43 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.js +101 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.js.map +1 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/parser.d.ts +14 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/parser.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/parser.js +250 -0
- package/dist/mcp/providers/atlassian/markdown-to-adf/parser.js.map +1 -0
- package/dist/mcp/providers/atlassian/provider.d.ts +38 -0
- package/dist/mcp/providers/atlassian/provider.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/provider.js +101 -0
- package/dist/mcp/providers/atlassian/provider.js.map +1 -0
- package/dist/mcp/providers/atlassian/resources.d.ts +4 -0
- package/dist/mcp/providers/atlassian/resources.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/resources.js +67 -0
- package/dist/mcp/providers/atlassian/resources.js.map +1 -0
- package/dist/mcp/providers/atlassian/tools/confluence.d.ts +4 -0
- package/dist/mcp/providers/atlassian/tools/confluence.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/tools/confluence.js +169 -0
- package/dist/mcp/providers/atlassian/tools/confluence.js.map +1 -0
- package/dist/mcp/providers/atlassian/tools/jira.d.ts +4 -0
- package/dist/mcp/providers/atlassian/tools/jira.d.ts.map +1 -0
- package/dist/mcp/providers/atlassian/tools/jira.js +274 -0
- package/dist/mcp/providers/atlassian/tools/jira.js.map +1 -0
- package/dist/mcp/providers/gitlab/auth.d.ts +10 -0
- package/dist/mcp/providers/gitlab/auth.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/auth.js +23 -0
- package/dist/mcp/providers/gitlab/auth.js.map +1 -0
- package/dist/mcp/providers/gitlab/client.d.ts +23 -0
- package/dist/mcp/providers/gitlab/client.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/client.js +17 -0
- package/dist/mcp/providers/gitlab/client.js.map +1 -0
- package/dist/mcp/providers/gitlab/index.d.ts +5 -0
- package/dist/mcp/providers/gitlab/index.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/index.js +10 -0
- package/dist/mcp/providers/gitlab/index.js.map +1 -0
- package/dist/mcp/providers/gitlab/provider.d.ts +25 -0
- package/dist/mcp/providers/gitlab/provider.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/provider.js +48 -0
- package/dist/mcp/providers/gitlab/provider.js.map +1 -0
- package/dist/mcp/providers/gitlab/resources.d.ts +11 -0
- package/dist/mcp/providers/gitlab/resources.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/resources.js +54 -0
- package/dist/mcp/providers/gitlab/resources.js.map +1 -0
- package/dist/mcp/providers/gitlab/tools/issues.d.ts +4 -0
- package/dist/mcp/providers/gitlab/tools/issues.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/tools/issues.js +120 -0
- package/dist/mcp/providers/gitlab/tools/issues.js.map +1 -0
- package/dist/mcp/providers/gitlab/tools/merge-requests.d.ts +11 -0
- package/dist/mcp/providers/gitlab/tools/merge-requests.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/tools/merge-requests.js +282 -0
- package/dist/mcp/providers/gitlab/tools/merge-requests.js.map +1 -0
- package/dist/mcp/providers/gitlab/tools/pipelines.d.ts +10 -0
- package/dist/mcp/providers/gitlab/tools/pipelines.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/tools/pipelines.js +173 -0
- package/dist/mcp/providers/gitlab/tools/pipelines.js.map +1 -0
- package/dist/mcp/providers/gitlab/tools/repository.d.ts +4 -0
- package/dist/mcp/providers/gitlab/tools/repository.d.ts.map +1 -0
- package/dist/mcp/providers/gitlab/tools/repository.js +191 -0
- package/dist/mcp/providers/gitlab/tools/repository.js.map +1 -0
- package/dist/mcp/providers/index.d.ts +4 -0
- package/dist/mcp/providers/index.d.ts.map +1 -0
- package/dist/mcp/providers/index.js +6 -0
- package/dist/mcp/providers/index.js.map +1 -0
- package/dist/mcp/providers/registry.d.ts +90 -0
- package/dist/mcp/providers/registry.d.ts.map +1 -0
- package/dist/mcp/providers/registry.js +128 -0
- package/dist/mcp/providers/registry.js.map +1 -0
- package/dist/mcp/providers/tool-helpers.d.ts +14 -0
- package/dist/mcp/providers/tool-helpers.d.ts.map +1 -0
- package/dist/mcp/providers/tool-helpers.js +12 -0
- package/dist/mcp/providers/tool-helpers.js.map +1 -0
- package/dist/mcp/providers/types.d.ts +80 -0
- package/dist/mcp/providers/types.d.ts.map +1 -0
- package/dist/mcp/providers/types.js +13 -0
- package/dist/mcp/providers/types.js.map +1 -0
- package/dist/mcp/server/auth.d.ts +8 -0
- package/dist/mcp/server/auth.d.ts.map +1 -0
- package/dist/mcp/server/auth.js +36 -0
- package/dist/mcp/server/auth.js.map +1 -0
- package/dist/mcp/server/health.d.ts +24 -0
- package/dist/mcp/server/health.d.ts.map +1 -0
- package/dist/mcp/server/health.js +37 -0
- package/dist/mcp/server/health.js.map +1 -0
- package/dist/mcp/server/index.d.ts +11 -0
- package/dist/mcp/server/index.d.ts.map +1 -0
- package/dist/mcp/server/index.js +27 -0
- package/dist/mcp/server/index.js.map +1 -0
- package/dist/mcp/server/logging.d.ts +46 -0
- package/dist/mcp/server/logging.d.ts.map +1 -0
- package/dist/mcp/server/logging.js +109 -0
- package/dist/mcp/server/logging.js.map +1 -0
- package/dist/mcp/server/ratelimit.d.ts +3 -0
- package/dist/mcp/server/ratelimit.d.ts.map +1 -0
- package/dist/mcp/server/ratelimit.js +70 -0
- package/dist/mcp/server/ratelimit.js.map +1 -0
- package/dist/mcp/server/routes.d.ts +3 -0
- package/dist/mcp/server/routes.d.ts.map +1 -0
- package/dist/mcp/server/routes.js +8 -0
- package/dist/mcp/server/routes.js.map +1 -0
- package/dist/mcp/server/server.d.ts +21 -0
- package/dist/mcp/server/server.d.ts.map +1 -0
- package/dist/mcp/server/server.js +114 -0
- package/dist/mcp/server/server.js.map +1 -0
- package/dist/mcp/server/validation.d.ts +22 -0
- package/dist/mcp/server/validation.d.ts.map +1 -0
- package/dist/mcp/server/validation.js +32 -0
- package/dist/mcp/server/validation.js.map +1 -0
- package/dist/mcp/store/encrypt.d.ts +22 -0
- package/dist/mcp/store/encrypt.d.ts.map +1 -0
- package/dist/mcp/store/encrypt.js +66 -0
- package/dist/mcp/store/encrypt.js.map +1 -0
- package/dist/mcp/store/index.d.ts +12 -0
- package/dist/mcp/store/index.d.ts.map +1 -0
- package/dist/mcp/store/index.js +16 -0
- package/dist/mcp/store/index.js.map +1 -0
- package/dist/mcp/store/migrate.d.ts +70 -0
- package/dist/mcp/store/migrate.d.ts.map +1 -0
- package/dist/mcp/store/migrate.js +211 -0
- package/dist/mcp/store/migrate.js.map +1 -0
- package/dist/mcp/store/null-token-store.d.ts +22 -0
- package/dist/mcp/store/null-token-store.d.ts.map +1 -0
- package/dist/mcp/store/null-token-store.js +40 -0
- package/dist/mcp/store/null-token-store.js.map +1 -0
- package/dist/mcp/store/sqlite.d.ts +27 -0
- package/dist/mcp/store/sqlite.d.ts.map +1 -0
- package/dist/mcp/store/sqlite.js +100 -0
- package/dist/mcp/store/sqlite.js.map +1 -0
- package/dist/mcp/store/types.d.ts +183 -0
- package/dist/mcp/store/types.d.ts.map +1 -0
- package/dist/mcp/store/types.js +13 -0
- package/dist/mcp/store/types.js.map +1 -0
- package/dist/mcp/token/http-client.d.ts +3 -0
- package/dist/mcp/token/http-client.d.ts.map +1 -0
- package/dist/mcp/token/http-client.js +186 -0
- package/dist/mcp/token/http-client.js.map +1 -0
- package/dist/mcp/token/index.d.ts +5 -0
- package/dist/mcp/token/index.d.ts.map +1 -0
- package/dist/mcp/token/index.js +15 -0
- package/dist/mcp/token/index.js.map +1 -0
- package/dist/mcp/token/manager.d.ts +54 -0
- package/dist/mcp/token/manager.d.ts.map +1 -0
- package/dist/mcp/token/manager.js +194 -0
- package/dist/mcp/token/manager.js.map +1 -0
- package/dist/mcp/token/null-token-manager.d.ts +19 -0
- package/dist/mcp/token/null-token-manager.d.ts.map +1 -0
- package/dist/mcp/token/null-token-manager.js +50 -0
- package/dist/mcp/token/null-token-manager.js.map +1 -0
- package/dist/mcp/token/oauth.d.ts +44 -0
- package/dist/mcp/token/oauth.d.ts.map +1 -0
- package/dist/mcp/token/oauth.js +257 -0
- package/dist/mcp/token/oauth.js.map +1 -0
- package/dist/mcp/token/types.d.ts +81 -0
- package/dist/mcp/token/types.d.ts.map +1 -0
- package/dist/mcp/token/types.js +6 -0
- package/dist/mcp/token/types.js.map +1 -0
- package/package.json +10 -3
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Status checks for AWS services: CodeArtifact and ECR.
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.checkCodeArtifactStatus = checkCodeArtifactStatus;
|
|
40
|
+
exports.checkECRStatus = checkECRStatus;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// CodeArtifact
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
/**
|
|
48
|
+
* Check CodeArtifact authentication status by parsing .npmrc (project or global)
|
|
49
|
+
*/
|
|
50
|
+
async function checkCodeArtifactStatus(config) {
|
|
51
|
+
const projectNpmrcPath = path.join(process.cwd(), '.npmrc');
|
|
52
|
+
const globalNpmrcPath = path.join(os.homedir(), '.npmrc');
|
|
53
|
+
let npmrcPath = null;
|
|
54
|
+
let location = null;
|
|
55
|
+
if (fs.existsSync(projectNpmrcPath)) {
|
|
56
|
+
npmrcPath = projectNpmrcPath;
|
|
57
|
+
location = 'project';
|
|
58
|
+
}
|
|
59
|
+
else if (fs.existsSync(globalNpmrcPath)) {
|
|
60
|
+
npmrcPath = globalNpmrcPath;
|
|
61
|
+
location = 'global';
|
|
62
|
+
}
|
|
63
|
+
if (!npmrcPath || !location) {
|
|
64
|
+
return { authenticated: false, error: 'No .npmrc file found (checked project and global)' };
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const content = fs.readFileSync(npmrcPath, 'utf-8');
|
|
68
|
+
const registryPattern = new RegExp(`//([^/]+\\.d\\.codeartifact\\.[^/]+\\.amazonaws\\.com/npm/${config.repository}/).*:_authToken=(.+)`, 'm');
|
|
69
|
+
const match = content.match(registryPattern);
|
|
70
|
+
if (!match) {
|
|
71
|
+
return { authenticated: false, location, error: `No CodeArtifact token found in .npmrc (${location})` };
|
|
72
|
+
}
|
|
73
|
+
const registry = `https://${match[1]}`;
|
|
74
|
+
const token = match[2].trim();
|
|
75
|
+
const expiresAt = parseJwtExpiry(token);
|
|
76
|
+
if (expiresAt && expiresAt < new Date()) {
|
|
77
|
+
return { authenticated: false, registry, expiresAt, location, error: 'Token expired' };
|
|
78
|
+
}
|
|
79
|
+
return { authenticated: true, registry, expiresAt: expiresAt ?? undefined, location };
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
return {
|
|
83
|
+
authenticated: false,
|
|
84
|
+
location,
|
|
85
|
+
error: `Failed to read .npmrc (${location}): ${error.message}`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function parseJwtExpiry(token) {
|
|
90
|
+
try {
|
|
91
|
+
const parts = token.split('.');
|
|
92
|
+
if (parts.length !== 3)
|
|
93
|
+
return null;
|
|
94
|
+
const decoded = Buffer.from(parts[1], 'base64url').toString('utf-8');
|
|
95
|
+
const data = JSON.parse(decoded);
|
|
96
|
+
return data.exp ? new Date(data.exp * 1000) : null;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// ECR
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
/**
|
|
106
|
+
* Check ECR authentication status by parsing ~/.docker/config.json
|
|
107
|
+
*/
|
|
108
|
+
async function checkECRStatus(config) {
|
|
109
|
+
const dockerConfigPath = path.join(os.homedir(), '.docker', 'config.json');
|
|
110
|
+
const registry = `${config.accountId}.dkr.ecr.${config.region}.amazonaws.com`;
|
|
111
|
+
if (!fs.existsSync(dockerConfigPath)) {
|
|
112
|
+
return { authenticated: false, registry, error: 'No ~/.docker/config.json found' };
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const content = fs.readFileSync(dockerConfigPath, 'utf-8');
|
|
116
|
+
const dockerConfig = JSON.parse(content);
|
|
117
|
+
if (dockerConfig.credHelpers) {
|
|
118
|
+
const helperKey = Object.keys(dockerConfig.credHelpers).find((k) => k.includes('ecr') && k.includes(config.region));
|
|
119
|
+
if (helperKey)
|
|
120
|
+
return { authenticated: true, registry };
|
|
121
|
+
}
|
|
122
|
+
if (!dockerConfig.auths) {
|
|
123
|
+
return { authenticated: false, registry, error: 'No Docker auth entries found' };
|
|
124
|
+
}
|
|
125
|
+
const ecrEntry = Object.keys(dockerConfig.auths).find((k) => k.includes(config.accountId) && k.includes('ecr') && k.includes(config.region));
|
|
126
|
+
if (!ecrEntry) {
|
|
127
|
+
return { authenticated: false, registry, error: 'No ECR credentials found' };
|
|
128
|
+
}
|
|
129
|
+
if (dockerConfig.credsStore && !dockerConfig.auths[ecrEntry]?.auth) {
|
|
130
|
+
return { authenticated: true, registry };
|
|
131
|
+
}
|
|
132
|
+
if (!dockerConfig.auths[ecrEntry]?.auth) {
|
|
133
|
+
return { authenticated: false, registry, error: 'No ECR credentials found' };
|
|
134
|
+
}
|
|
135
|
+
return { authenticated: true, registry };
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return {
|
|
139
|
+
authenticated: false,
|
|
140
|
+
registry,
|
|
141
|
+
error: `Failed to read Docker config: ${error.message}`,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=aws-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-checks.js","sourceRoot":"","sources":["../../../src/commands/status/aws-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,21 @@
|
|
|
1
|
-
import { SSOStatus, CodeArtifactStatus, ECRStatus } from './types';
|
|
2
|
-
import { CodeArtifactConfig, EcrConfig } from '../login/types';
|
|
3
1
|
/**
|
|
4
|
-
*
|
|
2
|
+
* Status check barrel — re-exports all check functions and utilities.
|
|
3
|
+
*
|
|
4
|
+
* Individual check implementations live in:
|
|
5
|
+
* - sso-checks.ts — AWS SSO (checkSSOStatus)
|
|
6
|
+
* - aws-checks.ts — CodeArtifact, ECR
|
|
7
|
+
* - mcp-checks.ts — GitLab token, Atlassian token, MCP server
|
|
5
8
|
*/
|
|
9
|
+
import type { SSOStatus } from './types';
|
|
6
10
|
declare function getProfileRegion(profile: string): string | undefined;
|
|
7
|
-
/**
|
|
8
|
-
* Parse assumed role ARN to extract role name and session name
|
|
9
|
-
* ARN format: arn:aws:sts::ACCOUNT:assumed-role/ROLE_NAME/SESSION_NAME
|
|
10
|
-
*/
|
|
11
11
|
declare function parseAssumedRoleArn(arn: string): {
|
|
12
12
|
roleName?: string;
|
|
13
13
|
sessionName?: string;
|
|
14
14
|
};
|
|
15
|
-
/**
|
|
16
|
-
* Derive account alias from profile name if it follows common convention
|
|
17
|
-
* e.g., "paduafg-development" -> "development", "company-prod" -> "prod"
|
|
18
|
-
*/
|
|
19
15
|
declare function deriveAccountAlias(profile: string): string | undefined;
|
|
20
|
-
/**
|
|
21
|
-
* Check SSO authentication status and get identity details
|
|
22
|
-
*/
|
|
23
16
|
export declare function checkSSOStatus(profile: string): Promise<SSOStatus>;
|
|
24
|
-
/**
|
|
25
|
-
* Check CodeArtifact authentication status by parsing .npmrc (project or global)
|
|
26
|
-
*/
|
|
27
|
-
export declare function checkCodeArtifactStatus(config: CodeArtifactConfig): Promise<CodeArtifactStatus>;
|
|
28
|
-
/**
|
|
29
|
-
* Check ECR authentication status by parsing ~/.docker/config.json
|
|
30
|
-
*/
|
|
31
|
-
export declare function checkECRStatus(config: EcrConfig): Promise<ECRStatus>;
|
|
32
|
-
/**
|
|
33
|
-
* Format a relative time string (e.g., "in 11 hours" or "2 hours ago")
|
|
34
|
-
*/
|
|
35
17
|
export declare function formatRelativeTime(date: Date): string;
|
|
18
|
+
export { checkCodeArtifactStatus, checkECRStatus } from './aws-checks';
|
|
19
|
+
export { checkGitLabToken, checkAtlassianToken, checkMcpServer, formatExpiresIn } from './mcp-checks';
|
|
36
20
|
export { getProfileRegion, parseAssumedRoleArn, deriveAccountAlias };
|
|
37
21
|
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/commands/status/checks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/commands/status/checks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AASzC,iBAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc7D;AAED,iBAAS,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAIrF;AAED,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/D;AAMD,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA4CxE;AAmBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAYrD;AAMD,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGtG,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Status check barrel — re-exports all check functions and utilities.
|
|
4
|
+
*
|
|
5
|
+
* Individual check implementations live in:
|
|
6
|
+
* - sso-checks.ts — AWS SSO (checkSSOStatus)
|
|
7
|
+
* - aws-checks.ts — CodeArtifact, ECR
|
|
8
|
+
* - mcp-checks.ts — GitLab token, Atlassian token, MCP server
|
|
9
|
+
*/
|
|
2
10
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
11
|
if (k2 === undefined) k2 = k;
|
|
4
12
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -33,9 +41,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
41
|
};
|
|
34
42
|
})();
|
|
35
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.formatExpiresIn = exports.checkMcpServer = exports.checkAtlassianToken = exports.checkGitLabToken = exports.checkECRStatus = exports.checkCodeArtifactStatus = void 0;
|
|
36
45
|
exports.checkSSOStatus = checkSSOStatus;
|
|
37
|
-
exports.checkCodeArtifactStatus = checkCodeArtifactStatus;
|
|
38
|
-
exports.checkECRStatus = checkECRStatus;
|
|
39
46
|
exports.formatRelativeTime = formatRelativeTime;
|
|
40
47
|
exports.getProfileRegion = getProfileRegion;
|
|
41
48
|
exports.parseAssumedRoleArn = parseAssumedRoleArn;
|
|
@@ -45,113 +52,62 @@ const fs = __importStar(require("fs"));
|
|
|
45
52
|
const path = __importStar(require("path"));
|
|
46
53
|
const os = __importStar(require("os"));
|
|
47
54
|
const utils_1 = require("../login/utils");
|
|
48
|
-
const CHECK_TIMEOUT_MS = 10000;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
const CHECK_TIMEOUT_MS = 10000;
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// SSO helpers (kept here as they are small and tightly coupled)
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
52
59
|
function getProfileRegion(profile) {
|
|
53
60
|
const awsConfigPath = path.join(os.homedir(), '.aws', 'config');
|
|
54
61
|
if (!fs.existsSync(awsConfigPath))
|
|
55
62
|
return undefined;
|
|
56
63
|
try {
|
|
57
64
|
const content = fs.readFileSync(awsConfigPath, 'utf-8');
|
|
58
|
-
// Match [profile name] or [default] section and extract region
|
|
59
65
|
const profileSection = profile === 'default'
|
|
60
66
|
? '\\[default\\]'
|
|
61
67
|
: `\\[profile\\s+${profile}\\]`;
|
|
62
68
|
const regex = new RegExp(`${profileSection}[^\\[]*?region\\s*=\\s*([^\\s\\n]+)`, 's');
|
|
63
|
-
|
|
64
|
-
return match?.[1];
|
|
69
|
+
return content.match(regex)?.[1];
|
|
65
70
|
}
|
|
66
71
|
catch {
|
|
67
72
|
return undefined;
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Parse assumed role ARN to extract role name and session name
|
|
72
|
-
* ARN format: arn:aws:sts::ACCOUNT:assumed-role/ROLE_NAME/SESSION_NAME
|
|
73
|
-
*/
|
|
74
75
|
function parseAssumedRoleArn(arn) {
|
|
75
76
|
const match = arn.match(/assumed-role\/([^/]+)\/(.+)$/);
|
|
76
|
-
if (match)
|
|
77
|
+
if (match)
|
|
77
78
|
return { roleName: match[1], sessionName: match[2] };
|
|
78
|
-
}
|
|
79
79
|
return {};
|
|
80
80
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Derive account alias from profile name if it follows common convention
|
|
83
|
-
* e.g., "paduafg-development" -> "development", "company-prod" -> "prod"
|
|
84
|
-
*/
|
|
85
81
|
function deriveAccountAlias(profile) {
|
|
86
|
-
// Common patterns: prefix-environment or just environment
|
|
87
82
|
const parts = profile.split('-');
|
|
88
|
-
|
|
89
|
-
// Return the last part(s) as the account alias
|
|
90
|
-
return parts.slice(1).join('-');
|
|
91
|
-
}
|
|
92
|
-
return undefined;
|
|
83
|
+
return parts.length > 1 ? parts.slice(1).join('-') : undefined;
|
|
93
84
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// SSO check
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
97
88
|
async function checkSSOStatus(profile) {
|
|
98
89
|
try {
|
|
99
90
|
(0, utils_1.validateProfileName)(profile);
|
|
100
91
|
}
|
|
101
92
|
catch (error) {
|
|
102
|
-
return {
|
|
103
|
-
authenticated: false,
|
|
104
|
-
error: error.message,
|
|
105
|
-
};
|
|
93
|
+
return { authenticated: false, error: error.message };
|
|
106
94
|
}
|
|
107
95
|
const result = (0, child_process_1.spawnSync)('aws', ['sts', 'get-caller-identity', '--profile', profile, '--output', 'json'], {
|
|
108
96
|
shell: false,
|
|
109
97
|
timeout: CHECK_TIMEOUT_MS,
|
|
110
98
|
maxBuffer: 1024 * 1024,
|
|
111
99
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
112
|
-
env: {
|
|
113
|
-
...(0, utils_1.getSubprocessEnv)(),
|
|
114
|
-
AWS_PROFILE: profile,
|
|
115
|
-
},
|
|
100
|
+
env: { ...(0, utils_1.getSubprocessEnv)(), AWS_PROFILE: profile },
|
|
116
101
|
});
|
|
117
102
|
if (result.error) {
|
|
118
103
|
if (result.error.message.includes('ENOENT')) {
|
|
119
|
-
return {
|
|
120
|
-
authenticated: false,
|
|
121
|
-
error: 'AWS CLI not installed',
|
|
122
|
-
};
|
|
104
|
+
return { authenticated: false, error: 'AWS CLI not installed' };
|
|
123
105
|
}
|
|
124
|
-
return {
|
|
125
|
-
authenticated: false,
|
|
126
|
-
error: result.error.message,
|
|
127
|
-
};
|
|
106
|
+
return { authenticated: false, error: result.error.message };
|
|
128
107
|
}
|
|
129
108
|
if (result.status !== 0) {
|
|
130
|
-
|
|
131
|
-
if (stderr.includes('ExpiredToken') || stderr.includes('Token has expired')) {
|
|
132
|
-
return {
|
|
133
|
-
authenticated: false,
|
|
134
|
-
error: 'Session expired',
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
if (stderr.includes('profile') && stderr.includes('not found')) {
|
|
138
|
-
return {
|
|
139
|
-
authenticated: false,
|
|
140
|
-
error: `Profile '${profile}' not found`,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
if (stderr.includes('No SSO configuration')) {
|
|
144
|
-
return {
|
|
145
|
-
authenticated: false,
|
|
146
|
-
error: 'Profile not configured for SSO',
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
return {
|
|
150
|
-
authenticated: false,
|
|
151
|
-
error: 'Not authenticated',
|
|
152
|
-
};
|
|
109
|
+
return parseSSOError(result.stderr?.toString() || '', profile);
|
|
153
110
|
}
|
|
154
|
-
// Parse the JSON output
|
|
155
111
|
try {
|
|
156
112
|
const output = result.stdout?.toString() || '';
|
|
157
113
|
const identity = JSON.parse(output);
|
|
@@ -160,209 +116,51 @@ async function checkSSOStatus(profile) {
|
|
|
160
116
|
const accountAlias = deriveAccountAlias(profile);
|
|
161
117
|
return {
|
|
162
118
|
authenticated: true,
|
|
163
|
-
identity: {
|
|
164
|
-
userId: identity.UserId,
|
|
165
|
-
account: identity.Account,
|
|
166
|
-
userArn: identity.Arn,
|
|
167
|
-
region,
|
|
168
|
-
roleName,
|
|
169
|
-
sessionName,
|
|
170
|
-
accountAlias,
|
|
171
|
-
},
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
return {
|
|
176
|
-
authenticated: false,
|
|
177
|
-
error: 'Failed to parse identity response',
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Check CodeArtifact authentication status by parsing .npmrc (project or global)
|
|
183
|
-
*/
|
|
184
|
-
async function checkCodeArtifactStatus(config) {
|
|
185
|
-
// Check project .npmrc first (priority), then fallback to global
|
|
186
|
-
const projectNpmrcPath = path.join(process.cwd(), '.npmrc');
|
|
187
|
-
const globalNpmrcPath = path.join(os.homedir(), '.npmrc');
|
|
188
|
-
let npmrcPath = null;
|
|
189
|
-
let location = null;
|
|
190
|
-
if (fs.existsSync(projectNpmrcPath)) {
|
|
191
|
-
npmrcPath = projectNpmrcPath;
|
|
192
|
-
location = 'project';
|
|
193
|
-
}
|
|
194
|
-
else if (fs.existsSync(globalNpmrcPath)) {
|
|
195
|
-
npmrcPath = globalNpmrcPath;
|
|
196
|
-
location = 'global';
|
|
197
|
-
}
|
|
198
|
-
if (!npmrcPath || !location) {
|
|
199
|
-
return {
|
|
200
|
-
authenticated: false,
|
|
201
|
-
error: 'No .npmrc file found (checked project and global)',
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
try {
|
|
205
|
-
const content = fs.readFileSync(npmrcPath, 'utf-8');
|
|
206
|
-
// Build expected registry pattern
|
|
207
|
-
// Format: //domain-owner.d.codeartifact.region.amazonaws.com/npm/repo/:_authToken=TOKEN
|
|
208
|
-
const registryPattern = new RegExp(`//([^/]+\\.d\\.codeartifact\\.[^/]+\\.amazonaws\\.com/npm/${config.repository}/).*:_authToken=(.+)`, 'm');
|
|
209
|
-
const match = content.match(registryPattern);
|
|
210
|
-
if (!match) {
|
|
211
|
-
return {
|
|
212
|
-
authenticated: false,
|
|
213
|
-
location,
|
|
214
|
-
error: `No CodeArtifact token found in .npmrc (${location})`,
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
const registry = `https://${match[1]}`;
|
|
218
|
-
const token = match[2].trim();
|
|
219
|
-
// Try to decode the JWT to get expiry
|
|
220
|
-
const expiresAt = parseJwtExpiry(token);
|
|
221
|
-
if (expiresAt && expiresAt < new Date()) {
|
|
222
|
-
return {
|
|
223
|
-
authenticated: false,
|
|
224
|
-
registry,
|
|
225
|
-
expiresAt,
|
|
226
|
-
location,
|
|
227
|
-
error: 'Token expired',
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
return {
|
|
231
|
-
authenticated: true,
|
|
232
|
-
registry,
|
|
233
|
-
expiresAt: expiresAt || undefined,
|
|
234
|
-
location,
|
|
119
|
+
identity: { userId: identity.UserId, account: identity.Account, userArn: identity.Arn, region, roleName, sessionName, accountAlias },
|
|
235
120
|
};
|
|
236
121
|
}
|
|
237
|
-
catch (error) {
|
|
238
|
-
return {
|
|
239
|
-
authenticated: false,
|
|
240
|
-
location,
|
|
241
|
-
error: `Failed to read .npmrc (${location}): ${error.message}`,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Parse JWT token to extract expiry time
|
|
247
|
-
* CodeArtifact tokens are JWTs with an exp claim
|
|
248
|
-
*/
|
|
249
|
-
function parseJwtExpiry(token) {
|
|
250
|
-
try {
|
|
251
|
-
// JWT format: header.payload.signature
|
|
252
|
-
const parts = token.split('.');
|
|
253
|
-
if (parts.length !== 3) {
|
|
254
|
-
return null;
|
|
255
|
-
}
|
|
256
|
-
// Decode the payload (base64url)
|
|
257
|
-
const payload = parts[1];
|
|
258
|
-
const decoded = Buffer.from(payload, 'base64url').toString('utf-8');
|
|
259
|
-
const data = JSON.parse(decoded);
|
|
260
|
-
if (data.exp) {
|
|
261
|
-
return new Date(data.exp * 1000);
|
|
262
|
-
}
|
|
263
|
-
return null;
|
|
264
|
-
}
|
|
265
122
|
catch {
|
|
266
|
-
return
|
|
123
|
+
return { authenticated: false, error: 'Failed to parse identity response' };
|
|
267
124
|
}
|
|
268
125
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
async function checkECRStatus(config) {
|
|
273
|
-
const dockerConfigPath = path.join(os.homedir(), '.docker', 'config.json');
|
|
274
|
-
const registry = `${config.accountId}.dkr.ecr.${config.region}.amazonaws.com`;
|
|
275
|
-
if (!fs.existsSync(dockerConfigPath)) {
|
|
276
|
-
return {
|
|
277
|
-
authenticated: false,
|
|
278
|
-
registry,
|
|
279
|
-
error: 'No ~/.docker/config.json found',
|
|
280
|
-
};
|
|
126
|
+
function parseSSOError(stderr, profile) {
|
|
127
|
+
if (stderr.includes('ExpiredToken') || stderr.includes('Token has expired')) {
|
|
128
|
+
return { authenticated: false, error: 'Session expired' };
|
|
281
129
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
const dockerConfig = JSON.parse(content);
|
|
285
|
-
// Check if using credential helper for specific registries
|
|
286
|
-
if (dockerConfig.credHelpers) {
|
|
287
|
-
const helperKey = Object.keys(dockerConfig.credHelpers).find(k => k.includes('ecr') && k.includes(config.region));
|
|
288
|
-
if (helperKey) {
|
|
289
|
-
// Credential helper is configured - assume authenticated
|
|
290
|
-
return {
|
|
291
|
-
authenticated: true,
|
|
292
|
-
registry,
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
// Check direct auth entries
|
|
297
|
-
if (!dockerConfig.auths) {
|
|
298
|
-
return {
|
|
299
|
-
authenticated: false,
|
|
300
|
-
registry,
|
|
301
|
-
error: 'No Docker auth entries found',
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
// Look for ECR registry entry
|
|
305
|
-
const ecrEntry = Object.keys(dockerConfig.auths).find(k => k.includes(config.accountId) && k.includes('ecr') && k.includes(config.region));
|
|
306
|
-
if (!ecrEntry) {
|
|
307
|
-
return {
|
|
308
|
-
authenticated: false,
|
|
309
|
-
registry,
|
|
310
|
-
error: 'No ECR credentials found',
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
// Check if using global credsStore (e.g., Docker Desktop)
|
|
314
|
-
// When credsStore is set, auths entries may be empty {} but credentials
|
|
315
|
-
// are stored in the system credential store
|
|
316
|
-
if (dockerConfig.credsStore && !dockerConfig.auths[ecrEntry]?.auth) {
|
|
317
|
-
// Registry entry exists + credsStore configured = credentials in external store
|
|
318
|
-
return {
|
|
319
|
-
authenticated: true,
|
|
320
|
-
registry,
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
// Check for inline auth token
|
|
324
|
-
if (!dockerConfig.auths[ecrEntry]?.auth) {
|
|
325
|
-
return {
|
|
326
|
-
authenticated: false,
|
|
327
|
-
registry,
|
|
328
|
-
error: 'No ECR credentials found',
|
|
329
|
-
};
|
|
330
|
-
}
|
|
331
|
-
// ECR auth exists inline
|
|
332
|
-
return {
|
|
333
|
-
authenticated: true,
|
|
334
|
-
registry,
|
|
335
|
-
};
|
|
130
|
+
if (stderr.includes('profile') && stderr.includes('not found')) {
|
|
131
|
+
return { authenticated: false, error: `Profile '${profile}' not found` };
|
|
336
132
|
}
|
|
337
|
-
|
|
338
|
-
return {
|
|
339
|
-
authenticated: false,
|
|
340
|
-
registry,
|
|
341
|
-
error: `Failed to read Docker config: ${error.message}`,
|
|
342
|
-
};
|
|
133
|
+
if (stderr.includes('No SSO configuration')) {
|
|
134
|
+
return { authenticated: false, error: 'Profile not configured for SSO' };
|
|
343
135
|
}
|
|
136
|
+
return { authenticated: false, error: 'Not authenticated' };
|
|
344
137
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
// formatRelativeTime utility
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
348
141
|
function formatRelativeTime(date) {
|
|
349
142
|
const now = new Date();
|
|
350
143
|
const diffMs = date.getTime() - now.getTime();
|
|
351
144
|
const diffMins = Math.round(diffMs / 60000);
|
|
352
145
|
const diffHours = Math.round(diffMs / 3600000);
|
|
353
146
|
if (diffMs < 0) {
|
|
354
|
-
|
|
355
|
-
if (diffMins > -60) {
|
|
147
|
+
if (diffMins > -60)
|
|
356
148
|
return `${Math.abs(diffMins)} minute${Math.abs(diffMins) !== 1 ? 's' : ''} ago`;
|
|
357
|
-
}
|
|
358
149
|
return `${Math.abs(diffHours)} hour${Math.abs(diffHours) !== 1 ? 's' : ''} ago`;
|
|
359
150
|
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
return `in ${diffMins} minute${diffMins !== 1 ? 's' : ''}`;
|
|
364
|
-
}
|
|
365
|
-
return `in ${diffHours} hour${diffHours !== 1 ? 's' : ''}`;
|
|
366
|
-
}
|
|
151
|
+
if (diffMins < 60)
|
|
152
|
+
return `in ${diffMins} minute${diffMins !== 1 ? 's' : ''}`;
|
|
153
|
+
return `in ${diffHours} hour${diffHours !== 1 ? 's' : ''}`;
|
|
367
154
|
}
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
// Re-exports from sub-modules
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
var aws_checks_1 = require("./aws-checks");
|
|
159
|
+
Object.defineProperty(exports, "checkCodeArtifactStatus", { enumerable: true, get: function () { return aws_checks_1.checkCodeArtifactStatus; } });
|
|
160
|
+
Object.defineProperty(exports, "checkECRStatus", { enumerable: true, get: function () { return aws_checks_1.checkECRStatus; } });
|
|
161
|
+
var mcp_checks_1 = require("./mcp-checks");
|
|
162
|
+
Object.defineProperty(exports, "checkGitLabToken", { enumerable: true, get: function () { return mcp_checks_1.checkGitLabToken; } });
|
|
163
|
+
Object.defineProperty(exports, "checkAtlassianToken", { enumerable: true, get: function () { return mcp_checks_1.checkAtlassianToken; } });
|
|
164
|
+
Object.defineProperty(exports, "checkMcpServer", { enumerable: true, get: function () { return mcp_checks_1.checkMcpServer; } });
|
|
165
|
+
Object.defineProperty(exports, "formatExpiresIn", { enumerable: true, get: function () { return mcp_checks_1.formatExpiresIn; } });
|
|
368
166
|
//# sourceMappingURL=checks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/status/checks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/status/checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAWtD;;GAEG;AACH,eAAO,MAAM,aAAa,SAKH,CAAC;AAExB;;GAEG;AACH,iBAAe,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CjE;AAED;;GAEG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAoI1F;AAGD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
|