@padua/cli 1.1.2 → 1.2.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/status/checks.d.ts +19 -0
- package/dist/commands/status/checks.d.ts.map +1 -0
- package/dist/commands/status/checks.js +281 -0
- package/dist/commands/status/checks.js.map +1 -0
- package/dist/commands/status/index.d.ts +16 -0
- package/dist/commands/status/index.d.ts.map +1 -0
- package/dist/commands/status/index.js +127 -0
- package/dist/commands/status/index.js.map +1 -0
- package/dist/commands/status/types.d.ts +69 -0
- package/dist/commands/status/types.d.ts.map +1 -0
- package/dist/commands/status/types.js +6 -0
- package/dist/commands/status/types.js.map +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SSOStatus, CodeArtifactStatus, ECRStatus } from './types';
|
|
2
|
+
import { CodeArtifactConfig, EcrConfig } from '../login/types';
|
|
3
|
+
/**
|
|
4
|
+
* Check SSO authentication status and get identity details
|
|
5
|
+
*/
|
|
6
|
+
export declare function checkSSOStatus(profile: string): Promise<SSOStatus>;
|
|
7
|
+
/**
|
|
8
|
+
* Check CodeArtifact authentication status by parsing ~/.npmrc
|
|
9
|
+
*/
|
|
10
|
+
export declare function checkCodeArtifactStatus(config: CodeArtifactConfig): Promise<CodeArtifactStatus>;
|
|
11
|
+
/**
|
|
12
|
+
* Check ECR authentication status by parsing ~/.docker/config.json
|
|
13
|
+
*/
|
|
14
|
+
export declare function checkECRStatus(config: EcrConfig): Promise<ECRStatus>;
|
|
15
|
+
/**
|
|
16
|
+
* Format a relative time string (e.g., "in 11 hours" or "2 hours ago")
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatRelativeTime(date: Date): string;
|
|
19
|
+
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/commands/status/checks.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAe,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK/D;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAiFxE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuDrG;AA4BD;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAqE1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAmBrD"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.checkSSOStatus = checkSSOStatus;
|
|
37
|
+
exports.checkCodeArtifactStatus = checkCodeArtifactStatus;
|
|
38
|
+
exports.checkECRStatus = checkECRStatus;
|
|
39
|
+
exports.formatRelativeTime = formatRelativeTime;
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const utils_1 = require("../login/utils");
|
|
45
|
+
const CHECK_TIMEOUT_MS = 10000; // 10 seconds
|
|
46
|
+
/**
|
|
47
|
+
* Check SSO authentication status and get identity details
|
|
48
|
+
*/
|
|
49
|
+
async function checkSSOStatus(profile) {
|
|
50
|
+
try {
|
|
51
|
+
(0, utils_1.validateProfileName)(profile);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return {
|
|
55
|
+
authenticated: false,
|
|
56
|
+
error: error.message,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const result = (0, child_process_1.spawnSync)('aws', ['sts', 'get-caller-identity', '--profile', profile, '--output', 'json'], {
|
|
60
|
+
shell: false,
|
|
61
|
+
timeout: CHECK_TIMEOUT_MS,
|
|
62
|
+
maxBuffer: 1024 * 1024,
|
|
63
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
64
|
+
env: {
|
|
65
|
+
...(0, utils_1.getSubprocessEnv)(),
|
|
66
|
+
AWS_PROFILE: profile,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
if (result.error) {
|
|
70
|
+
if (result.error.message.includes('ENOENT')) {
|
|
71
|
+
return {
|
|
72
|
+
authenticated: false,
|
|
73
|
+
error: 'AWS CLI not installed',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
authenticated: false,
|
|
78
|
+
error: result.error.message,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (result.status !== 0) {
|
|
82
|
+
const stderr = result.stderr?.toString() || '';
|
|
83
|
+
if (stderr.includes('ExpiredToken') || stderr.includes('Token has expired')) {
|
|
84
|
+
return {
|
|
85
|
+
authenticated: false,
|
|
86
|
+
error: 'Session expired',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (stderr.includes('profile') && stderr.includes('not found')) {
|
|
90
|
+
return {
|
|
91
|
+
authenticated: false,
|
|
92
|
+
error: `Profile '${profile}' not found`,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (stderr.includes('No SSO configuration')) {
|
|
96
|
+
return {
|
|
97
|
+
authenticated: false,
|
|
98
|
+
error: 'Profile not configured for SSO',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
authenticated: false,
|
|
103
|
+
error: 'Not authenticated',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Parse the JSON output
|
|
107
|
+
try {
|
|
108
|
+
const output = result.stdout?.toString() || '';
|
|
109
|
+
const identity = JSON.parse(output);
|
|
110
|
+
return {
|
|
111
|
+
authenticated: true,
|
|
112
|
+
identity: {
|
|
113
|
+
userId: identity.UserId,
|
|
114
|
+
account: identity.Account,
|
|
115
|
+
userArn: identity.Arn,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return {
|
|
121
|
+
authenticated: false,
|
|
122
|
+
error: 'Failed to parse identity response',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check CodeArtifact authentication status by parsing ~/.npmrc
|
|
128
|
+
*/
|
|
129
|
+
async function checkCodeArtifactStatus(config) {
|
|
130
|
+
const npmrcPath = path.join(os.homedir(), '.npmrc');
|
|
131
|
+
if (!fs.existsSync(npmrcPath)) {
|
|
132
|
+
return {
|
|
133
|
+
authenticated: false,
|
|
134
|
+
error: 'No ~/.npmrc file found',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
const content = fs.readFileSync(npmrcPath, 'utf-8');
|
|
139
|
+
// Build expected registry pattern
|
|
140
|
+
// Format: //domain-owner.d.codeartifact.region.amazonaws.com/npm/repo/:_authToken=TOKEN
|
|
141
|
+
const registryPattern = new RegExp(`//([^/]+\\.d\\.codeartifact\\.[^/]+\\.amazonaws\\.com/npm/${config.repository}/).*:_authToken=(.+)`, 'm');
|
|
142
|
+
const match = content.match(registryPattern);
|
|
143
|
+
if (!match) {
|
|
144
|
+
return {
|
|
145
|
+
authenticated: false,
|
|
146
|
+
error: 'No CodeArtifact token found in ~/.npmrc',
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
const registry = `https://${match[1]}`;
|
|
150
|
+
const token = match[2].trim();
|
|
151
|
+
// Try to decode the JWT to get expiry
|
|
152
|
+
const expiresAt = parseJwtExpiry(token);
|
|
153
|
+
if (expiresAt && expiresAt < new Date()) {
|
|
154
|
+
return {
|
|
155
|
+
authenticated: false,
|
|
156
|
+
registry,
|
|
157
|
+
expiresAt,
|
|
158
|
+
error: 'Token expired',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
authenticated: true,
|
|
163
|
+
registry,
|
|
164
|
+
expiresAt: expiresAt || undefined,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
return {
|
|
169
|
+
authenticated: false,
|
|
170
|
+
error: `Failed to read ~/.npmrc: ${error.message}`,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Parse JWT token to extract expiry time
|
|
176
|
+
* CodeArtifact tokens are JWTs with an exp claim
|
|
177
|
+
*/
|
|
178
|
+
function parseJwtExpiry(token) {
|
|
179
|
+
try {
|
|
180
|
+
// JWT format: header.payload.signature
|
|
181
|
+
const parts = token.split('.');
|
|
182
|
+
if (parts.length !== 3) {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
// Decode the payload (base64url)
|
|
186
|
+
const payload = parts[1];
|
|
187
|
+
const decoded = Buffer.from(payload, 'base64url').toString('utf-8');
|
|
188
|
+
const data = JSON.parse(decoded);
|
|
189
|
+
if (data.exp) {
|
|
190
|
+
return new Date(data.exp * 1000);
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check ECR authentication status by parsing ~/.docker/config.json
|
|
200
|
+
*/
|
|
201
|
+
async function checkECRStatus(config) {
|
|
202
|
+
const dockerConfigPath = path.join(os.homedir(), '.docker', 'config.json');
|
|
203
|
+
const registry = `${config.accountId}.dkr.ecr.${config.region}.amazonaws.com`;
|
|
204
|
+
if (!fs.existsSync(dockerConfigPath)) {
|
|
205
|
+
return {
|
|
206
|
+
authenticated: false,
|
|
207
|
+
registry,
|
|
208
|
+
error: 'No ~/.docker/config.json found',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
const content = fs.readFileSync(dockerConfigPath, 'utf-8');
|
|
213
|
+
const dockerConfig = JSON.parse(content);
|
|
214
|
+
// Check if using credential helper (common on macOS)
|
|
215
|
+
if (dockerConfig.credHelpers) {
|
|
216
|
+
const helperKey = Object.keys(dockerConfig.credHelpers).find(k => k.includes('ecr') && k.includes(config.region));
|
|
217
|
+
if (helperKey) {
|
|
218
|
+
// Credential helper is configured - assume authenticated
|
|
219
|
+
// (we can't easily check helper-stored credentials)
|
|
220
|
+
return {
|
|
221
|
+
authenticated: true,
|
|
222
|
+
registry,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Check direct auth entries
|
|
227
|
+
if (!dockerConfig.auths) {
|
|
228
|
+
return {
|
|
229
|
+
authenticated: false,
|
|
230
|
+
registry,
|
|
231
|
+
error: 'No Docker auth entries found',
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
// Look for ECR registry entry
|
|
235
|
+
const ecrEntry = Object.keys(dockerConfig.auths).find(k => k.includes(config.accountId) && k.includes('ecr') && k.includes(config.region));
|
|
236
|
+
if (!ecrEntry || !dockerConfig.auths[ecrEntry]?.auth) {
|
|
237
|
+
return {
|
|
238
|
+
authenticated: false,
|
|
239
|
+
registry,
|
|
240
|
+
error: 'No ECR credentials found',
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
// ECR auth exists - tokens are valid for 12 hours but we can't check expiry
|
|
244
|
+
// from the stored credential alone
|
|
245
|
+
return {
|
|
246
|
+
authenticated: true,
|
|
247
|
+
registry,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
return {
|
|
252
|
+
authenticated: false,
|
|
253
|
+
registry,
|
|
254
|
+
error: `Failed to read Docker config: ${error.message}`,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Format a relative time string (e.g., "in 11 hours" or "2 hours ago")
|
|
260
|
+
*/
|
|
261
|
+
function formatRelativeTime(date) {
|
|
262
|
+
const now = new Date();
|
|
263
|
+
const diffMs = date.getTime() - now.getTime();
|
|
264
|
+
const diffMins = Math.round(diffMs / 60000);
|
|
265
|
+
const diffHours = Math.round(diffMs / 3600000);
|
|
266
|
+
if (diffMs < 0) {
|
|
267
|
+
// In the past
|
|
268
|
+
if (diffMins > -60) {
|
|
269
|
+
return `${Math.abs(diffMins)} minute${Math.abs(diffMins) !== 1 ? 's' : ''} ago`;
|
|
270
|
+
}
|
|
271
|
+
return `${Math.abs(diffHours)} hour${Math.abs(diffHours) !== 1 ? 's' : ''} ago`;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
// In the future
|
|
275
|
+
if (diffMins < 60) {
|
|
276
|
+
return `in ${diffMins} minute${diffMins !== 1 ? 's' : ''}`;
|
|
277
|
+
}
|
|
278
|
+
return `in ${diffHours} hour${diffHours !== 1 ? 's' : ''}`;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/status/checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { StatusOptions, StatusResult } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Status command definition
|
|
5
|
+
*/
|
|
6
|
+
export declare const statusCommand: Command;
|
|
7
|
+
/**
|
|
8
|
+
* Main handler for status command
|
|
9
|
+
*/
|
|
10
|
+
declare function handleStatus(options: StatusOptions): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Display status results to console
|
|
13
|
+
*/
|
|
14
|
+
declare function displayStatus(result: StatusResult, profile: string, options: StatusOptions): void;
|
|
15
|
+
export { handleStatus, displayStatus };
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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;AAGtD;;GAEG;AACH,eAAO,MAAM,aAAa,SAKH,CAAC;AAExB;;GAEG;AACH,iBAAe,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCjE;AAED;;GAEG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAiE1F;AAGD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.statusCommand = void 0;
|
|
7
|
+
exports.handleStatus = handleStatus;
|
|
8
|
+
exports.displayStatus = displayStatus;
|
|
9
|
+
const commander_1 = require("commander");
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const config_1 = require("../login/config");
|
|
12
|
+
const types_1 = require("../login/types");
|
|
13
|
+
const checks_1 = require("./checks");
|
|
14
|
+
/**
|
|
15
|
+
* Status command definition
|
|
16
|
+
*/
|
|
17
|
+
exports.statusCommand = new commander_1.Command('status')
|
|
18
|
+
.description('Check current authentication status for all services')
|
|
19
|
+
.option('-p, --profile <name>', 'AWS SSO profile to check')
|
|
20
|
+
.option('--no-color', 'Disable colored output')
|
|
21
|
+
.option('-q, --quiet', 'Only output if there are issues (exit code reflects status)')
|
|
22
|
+
.action(handleStatus);
|
|
23
|
+
/**
|
|
24
|
+
* Main handler for status command
|
|
25
|
+
*/
|
|
26
|
+
async function handleStatus(options) {
|
|
27
|
+
// Load configuration
|
|
28
|
+
const config = await (0, config_1.loadConfig)();
|
|
29
|
+
if (!config) {
|
|
30
|
+
if (!options.quiet) {
|
|
31
|
+
console.error(options.noColor
|
|
32
|
+
? 'Error: No padua.config.json found. Run: padua init'
|
|
33
|
+
: chalk_1.default.red('Error: No padua.config.json found. Run: padua init'));
|
|
34
|
+
}
|
|
35
|
+
process.exit(2);
|
|
36
|
+
}
|
|
37
|
+
const profile = (0, types_1.getEffectiveProfile)(options, config);
|
|
38
|
+
// Check all services
|
|
39
|
+
const result = {
|
|
40
|
+
sso: await (0, checks_1.checkSSOStatus)(profile),
|
|
41
|
+
codeartifact: (0, types_1.hasCodeArtifactConfig)(config)
|
|
42
|
+
? await (0, checks_1.checkCodeArtifactStatus)(config.codeartifact)
|
|
43
|
+
: null,
|
|
44
|
+
ecr: (0, types_1.hasEcrConfig)(config)
|
|
45
|
+
? await (0, checks_1.checkECRStatus)(config.ecr)
|
|
46
|
+
: null,
|
|
47
|
+
};
|
|
48
|
+
// Determine if all services are healthy
|
|
49
|
+
const allHealthy = result.sso.authenticated
|
|
50
|
+
&& (result.codeartifact === null || result.codeartifact.authenticated)
|
|
51
|
+
&& (result.ecr === null || result.ecr.authenticated);
|
|
52
|
+
// In quiet mode, only output if there are issues
|
|
53
|
+
if (options.quiet && allHealthy) {
|
|
54
|
+
process.exit(0);
|
|
55
|
+
}
|
|
56
|
+
// Display results
|
|
57
|
+
displayStatus(result, profile, options);
|
|
58
|
+
// Exit with appropriate code
|
|
59
|
+
process.exit(allHealthy ? 0 : 1);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Display status results to console
|
|
63
|
+
*/
|
|
64
|
+
function displayStatus(result, profile, options) {
|
|
65
|
+
const { noColor } = options;
|
|
66
|
+
// Helper functions for colored output
|
|
67
|
+
const success = (text) => noColor ? text : chalk_1.default.green(text);
|
|
68
|
+
const error = (text) => noColor ? text : chalk_1.default.red(text);
|
|
69
|
+
const dim = (text) => noColor ? text : chalk_1.default.dim(text);
|
|
70
|
+
const bold = (text) => noColor ? text : chalk_1.default.bold(text);
|
|
71
|
+
const cyan = (text) => noColor ? text : chalk_1.default.cyan(text);
|
|
72
|
+
console.log('');
|
|
73
|
+
// SSO Status
|
|
74
|
+
console.log(bold(`AWS SSO ${dim(`(profile: ${profile})`)}`));
|
|
75
|
+
if (result.sso.authenticated && result.sso.identity) {
|
|
76
|
+
console.log(` Status: ${success('Authenticated')}`);
|
|
77
|
+
console.log(` Account: ${result.sso.identity.account}`);
|
|
78
|
+
console.log(` User: ${dim(result.sso.identity.userArn)}`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(` Status: ${error('Not authenticated')}`);
|
|
82
|
+
if (result.sso.error) {
|
|
83
|
+
console.log(` Error: ${dim(result.sso.error)}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// CodeArtifact Status
|
|
87
|
+
if (result.codeartifact !== null) {
|
|
88
|
+
console.log('');
|
|
89
|
+
console.log(bold('CodeArtifact (npm)'));
|
|
90
|
+
if (result.codeartifact.authenticated) {
|
|
91
|
+
console.log(` Status: ${success('Authenticated')}`);
|
|
92
|
+
if (result.codeartifact.registry) {
|
|
93
|
+
console.log(` Registry: ${dim(result.codeartifact.registry)}`);
|
|
94
|
+
}
|
|
95
|
+
if (result.codeartifact.expiresAt) {
|
|
96
|
+
const relTime = (0, checks_1.formatRelativeTime)(result.codeartifact.expiresAt);
|
|
97
|
+
const expiryStr = result.codeartifact.expiresAt.toLocaleString();
|
|
98
|
+
console.log(` Expires: ${cyan(expiryStr)} ${dim(`(${relTime})`)}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log(` Status: ${error('Not authenticated')}`);
|
|
103
|
+
if (result.codeartifact.error) {
|
|
104
|
+
console.log(` Error: ${dim(result.codeartifact.error)}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// ECR Status
|
|
109
|
+
if (result.ecr !== null) {
|
|
110
|
+
console.log('');
|
|
111
|
+
console.log(bold('ECR (Docker)'));
|
|
112
|
+
if (result.ecr.authenticated) {
|
|
113
|
+
console.log(` Status: ${success('Authenticated')}`);
|
|
114
|
+
if (result.ecr.registry) {
|
|
115
|
+
console.log(` Registry: ${dim(result.ecr.registry)}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.log(` Status: ${error('Not authenticated')}`);
|
|
120
|
+
if (result.ecr.error) {
|
|
121
|
+
console.log(` Error: ${dim(result.ecr.error)}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
console.log('');
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the status command
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* SSO identity details from aws sts get-caller-identity
|
|
6
|
+
*/
|
|
7
|
+
export interface SSOIdentity {
|
|
8
|
+
/** AWS account ID */
|
|
9
|
+
account: string;
|
|
10
|
+
/** User ARN (role assumed via SSO) */
|
|
11
|
+
userArn: string;
|
|
12
|
+
/** User ID */
|
|
13
|
+
userId: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Status of a single service
|
|
17
|
+
*/
|
|
18
|
+
export interface ServiceStatus {
|
|
19
|
+
/** Whether the service is currently authenticated */
|
|
20
|
+
authenticated: boolean;
|
|
21
|
+
/** Error message if check failed */
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* SSO service status with identity details
|
|
26
|
+
*/
|
|
27
|
+
export interface SSOStatus extends ServiceStatus {
|
|
28
|
+
/** Identity details if authenticated */
|
|
29
|
+
identity?: SSOIdentity;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* CodeArtifact service status with token details
|
|
33
|
+
*/
|
|
34
|
+
export interface CodeArtifactStatus extends ServiceStatus {
|
|
35
|
+
/** Registry URL if configured */
|
|
36
|
+
registry?: string;
|
|
37
|
+
/** Token expiration time if available */
|
|
38
|
+
expiresAt?: Date;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* ECR service status with registry details
|
|
42
|
+
*/
|
|
43
|
+
export interface ECRStatus extends ServiceStatus {
|
|
44
|
+
/** Registry URL if configured */
|
|
45
|
+
registry?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Complete status result for all services
|
|
49
|
+
*/
|
|
50
|
+
export interface StatusResult {
|
|
51
|
+
/** SSO authentication status */
|
|
52
|
+
sso: SSOStatus;
|
|
53
|
+
/** CodeArtifact authentication status (null if not configured) */
|
|
54
|
+
codeartifact: CodeArtifactStatus | null;
|
|
55
|
+
/** ECR authentication status (null if not configured) */
|
|
56
|
+
ecr: ECRStatus | null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Command-line options for `padua status`
|
|
60
|
+
*/
|
|
61
|
+
export interface StatusOptions {
|
|
62
|
+
/** AWS SSO profile to check */
|
|
63
|
+
profile?: string;
|
|
64
|
+
/** Disable colored output */
|
|
65
|
+
noColor?: boolean;
|
|
66
|
+
/** Only output if there are issues */
|
|
67
|
+
quiet?: boolean;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/status/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,aAAa,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,wCAAwC;IACxC,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,GAAG,EAAE,SAAS,CAAC;IACf,kEAAkE;IAClE,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,yDAAyD;IACzD,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/status/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/index.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
|
-
const login_1 = require("./commands/login");
|
|
6
5
|
const init_1 = require("./commands/init");
|
|
6
|
+
const login_1 = require("./commands/login");
|
|
7
|
+
const status_1 = require("./commands/status");
|
|
7
8
|
const program = new commander_1.Command();
|
|
8
9
|
program
|
|
9
10
|
.name('padua')
|
|
@@ -12,5 +13,6 @@ program
|
|
|
12
13
|
// Register commands
|
|
13
14
|
program.addCommand(init_1.initCommand);
|
|
14
15
|
program.addCommand(login_1.loginCommand);
|
|
16
|
+
program.addCommand(status_1.statusCommand);
|
|
15
17
|
program.parse();
|
|
16
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|