@armoriq/sdk-dev 0.2.15 → 0.3.1
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/cli/commands/auth.d.ts +15 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +259 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/keys.d.ts +14 -0
- package/dist/cli/commands/keys.d.ts.map +1 -0
- package/dist/cli/commands/keys.js +132 -0
- package/dist/cli/commands/keys.js.map +1 -0
- package/dist/cli/commands/orgs.d.ts +10 -0
- package/dist/cli/commands/orgs.d.ts.map +1 -0
- package/dist/cli/commands/orgs.js +152 -0
- package/dist/cli/commands/orgs.js.map +1 -0
- package/dist/cli/commands/status.d.ts +9 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +103 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +141 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/state.d.ts +22 -0
- package/dist/cli/state.d.ts.map +1 -0
- package/dist/cli/state.js +91 -0
- package/dist/cli/state.js.map +1 -0
- package/dist/cli/util.d.ts +19 -0
- package/dist/cli/util.d.ts.map +1 -0
- package/dist/cli/util.js +107 -0
- package/dist/cli/util.js.map +1 -0
- package/dist/client.d.ts +73 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +289 -5
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +64 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +215 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/google_adk.d.ts +113 -0
- package/dist/integrations/google_adk.d.ts.map +1 -0
- package/dist/integrations/google_adk.js +319 -0
- package/dist/integrations/google_adk.js.map +1 -0
- package/dist/models.d.ts +36 -0
- package/dist/models.d.ts.map +1 -1
- package/dist/plan_builder.d.ts +53 -0
- package/dist/plan_builder.d.ts.map +1 -0
- package/dist/plan_builder.js +110 -0
- package/dist/plan_builder.js.map +1 -0
- package/dist/session.d.ts +87 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +490 -0
- package/dist/session.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* armoriq login / logout / whoami — OAuth 2.0 device-code flow (RFC 8628).
|
|
3
|
+
* Mirrors armoriq_sdk/cli_auth.py.
|
|
4
|
+
*
|
|
5
|
+
* The browser approval page either redirects straight back to our
|
|
6
|
+
* local callback with the key, or — if the callback can't be reached —
|
|
7
|
+
* we fall back to polling /auth/device/token.
|
|
8
|
+
*/
|
|
9
|
+
export declare function cmdLogin(args: {
|
|
10
|
+
backend?: string;
|
|
11
|
+
org?: string;
|
|
12
|
+
}): Promise<number>;
|
|
13
|
+
export declare function cmdLogout(): number;
|
|
14
|
+
export declare function cmdWhoami(): number;
|
|
15
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgHH,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0GxF;AAED,wBAAgB,SAAS,IAAI,MAAM,CAOlC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAkBlC"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* armoriq login / logout / whoami — OAuth 2.0 device-code flow (RFC 8628).
|
|
4
|
+
* Mirrors armoriq_sdk/cli_auth.py.
|
|
5
|
+
*
|
|
6
|
+
* The browser approval page either redirects straight back to our
|
|
7
|
+
* local callback with the key, or — if the callback can't be reached —
|
|
8
|
+
* we fall back to polling /auth/device/token.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
44
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.cmdLogin = cmdLogin;
|
|
48
|
+
exports.cmdLogout = cmdLogout;
|
|
49
|
+
exports.cmdWhoami = cmdWhoami;
|
|
50
|
+
const http = __importStar(require("http"));
|
|
51
|
+
const net = __importStar(require("net"));
|
|
52
|
+
const url_1 = require("url");
|
|
53
|
+
const child_process_1 = require("child_process");
|
|
54
|
+
const axios_1 = __importDefault(require("axios"));
|
|
55
|
+
const credentials_1 = require("../../credentials");
|
|
56
|
+
const util_1 = require("../util");
|
|
57
|
+
const SUCCESS_HTML = `<!DOCTYPE html>
|
|
58
|
+
<html><head><meta charset="utf-8"><title>ArmorIQ</title>
|
|
59
|
+
<style>
|
|
60
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
61
|
+
display: flex; align-items: center; justify-content: center; height: 100vh;
|
|
62
|
+
margin: 0; background: #f8fafc; color: #1e293b; }
|
|
63
|
+
.card { text-align: center; padding: 3rem; background: white;
|
|
64
|
+
border-radius: 1rem; box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
|
65
|
+
max-width: 400px; }
|
|
66
|
+
.check { width: 64px; height: 64px; background: #dcfce7; border-radius: 50%;
|
|
67
|
+
display: flex; align-items: center; justify-content: center;
|
|
68
|
+
margin: 0 auto 1.5rem; }
|
|
69
|
+
.check svg { width: 32px; height: 32px; color: #16a34a; }
|
|
70
|
+
h2 { margin: 0 0 0.5rem; font-size: 1.25rem; }
|
|
71
|
+
p { margin: 0; font-size: 0.875rem; color: #64748b; }
|
|
72
|
+
</style></head><body>
|
|
73
|
+
<div class="card">
|
|
74
|
+
<div class="check">
|
|
75
|
+
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
76
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
|
77
|
+
</svg>
|
|
78
|
+
</div>
|
|
79
|
+
<h2>Authorized</h2>
|
|
80
|
+
<p>You can close this tab and return to your terminal.</p>
|
|
81
|
+
</div>
|
|
82
|
+
</body></html>`;
|
|
83
|
+
function findFreePort() {
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
const server = net.createServer();
|
|
86
|
+
server.unref();
|
|
87
|
+
server.on('error', reject);
|
|
88
|
+
server.listen(0, '127.0.0.1', () => {
|
|
89
|
+
const addr = server.address();
|
|
90
|
+
if (addr && typeof addr === 'object') {
|
|
91
|
+
const port = addr.port;
|
|
92
|
+
server.close(() => resolve(port));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
reject(new Error('Could not get free port'));
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function startCallbackServer(port) {
|
|
101
|
+
let resolveResult;
|
|
102
|
+
const once = new Promise((resolve) => {
|
|
103
|
+
resolveResult = resolve;
|
|
104
|
+
});
|
|
105
|
+
const server = http.createServer((req, res) => {
|
|
106
|
+
const url = new url_1.URL(req.url ?? '/', `http://localhost:${port}`);
|
|
107
|
+
if (url.pathname === '/callback') {
|
|
108
|
+
const params = Object.fromEntries(url.searchParams.entries());
|
|
109
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
110
|
+
res.end(SUCCESS_HTML);
|
|
111
|
+
const result = {
|
|
112
|
+
api_key: params.key,
|
|
113
|
+
email: params.email,
|
|
114
|
+
user_id: params.user_id,
|
|
115
|
+
org_id: params.org_id,
|
|
116
|
+
};
|
|
117
|
+
if (result.api_key)
|
|
118
|
+
resolveResult(result);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
res.writeHead(404);
|
|
122
|
+
res.end();
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
server.listen(port, '127.0.0.1');
|
|
126
|
+
return { server, once };
|
|
127
|
+
}
|
|
128
|
+
function openBrowser(url) {
|
|
129
|
+
const cmd = process.platform === 'darwin'
|
|
130
|
+
? `open "${url}"`
|
|
131
|
+
: process.platform === 'win32'
|
|
132
|
+
? `start "" "${url}"`
|
|
133
|
+
: `xdg-open "${url}"`;
|
|
134
|
+
(0, child_process_1.exec)(cmd, () => {
|
|
135
|
+
/* best-effort */
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function sleep(ms) {
|
|
139
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
140
|
+
}
|
|
141
|
+
async function cmdLogin(args) {
|
|
142
|
+
const backend = (args.backend ?? process.env.ARMORIQ_BACKEND_URL ?? (0, util_1.backendBase)()).replace(/\/+$/, '');
|
|
143
|
+
const requestedOrg = (args.org ?? '').trim();
|
|
144
|
+
(0, util_1.out)('');
|
|
145
|
+
(0, util_1.out)(' \x1b[1m\x1b[36m┃ ArmorIQ Login\x1b[0m');
|
|
146
|
+
(0, util_1.out)('');
|
|
147
|
+
const port = await findFreePort();
|
|
148
|
+
const callbackUrl = `http://localhost:${port}/callback`;
|
|
149
|
+
const { server, once: callbackOnce } = startCallbackServer(port);
|
|
150
|
+
let dc;
|
|
151
|
+
try {
|
|
152
|
+
const r = await axios_1.default.post(`${backend}/auth/device/code`, { callback_url: callbackUrl }, { timeout: 10000 });
|
|
153
|
+
dc = r.data;
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
server.close();
|
|
157
|
+
(0, util_1.out)(` ${util_1.CROSS} Failed to request device code: ${e.message}`);
|
|
158
|
+
return 1;
|
|
159
|
+
}
|
|
160
|
+
const { device_code, user_code, verification_uri_complete } = dc;
|
|
161
|
+
const interval = Number(dc.interval ?? 5) || 5;
|
|
162
|
+
const expiresIn = Number(dc.expires_in ?? 600) || 600;
|
|
163
|
+
const sep = verification_uri_complete.includes('?') ? '&' : '?';
|
|
164
|
+
let browserUrl = `${verification_uri_complete}${sep}callback=${encodeURIComponent(callbackUrl)}`;
|
|
165
|
+
if (requestedOrg)
|
|
166
|
+
browserUrl += `&org=${encodeURIComponent(requestedOrg)}`;
|
|
167
|
+
(0, util_1.out)(' Opening browser...\n');
|
|
168
|
+
openBrowser(browserUrl);
|
|
169
|
+
(0, util_1.out)(' If the browser didn\'t open, visit:');
|
|
170
|
+
(0, util_1.out)(` \x1b[36m\x1b[1m${browserUrl}\x1b[0m\n`);
|
|
171
|
+
(0, util_1.out)(` Confirm this code in your browser: \x1b[1m${user_code}\x1b[0m\n`);
|
|
172
|
+
process.stdout.write(' Waiting for authorization...');
|
|
173
|
+
const deadline = Date.now() + expiresIn * 1000;
|
|
174
|
+
let result;
|
|
175
|
+
let lastErr;
|
|
176
|
+
while (Date.now() < deadline && !result) {
|
|
177
|
+
// Race callback vs poll; whichever resolves first wins.
|
|
178
|
+
const callbackOrTimeout = Promise.race([
|
|
179
|
+
callbackOnce.then((r) => ({ kind: 'cb', value: r })),
|
|
180
|
+
sleep(interval * 1000).then(() => ({ kind: 'tick' })),
|
|
181
|
+
]);
|
|
182
|
+
const tick = await callbackOrTimeout;
|
|
183
|
+
if (tick.kind === 'cb' && tick.value.api_key) {
|
|
184
|
+
result = tick.value;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
const pr = await axios_1.default.post(`${backend}/auth/device/token`, { deviceCode: device_code }, { timeout: 10000, validateStatus: () => true });
|
|
189
|
+
const data = pr.data ?? {};
|
|
190
|
+
const err = data.error;
|
|
191
|
+
if (err === 'authorization_pending' || err === 'slow_down')
|
|
192
|
+
continue;
|
|
193
|
+
if (err) {
|
|
194
|
+
lastErr = data.error_description || err;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
if (data.api_key) {
|
|
198
|
+
result = {
|
|
199
|
+
api_key: data.api_key,
|
|
200
|
+
email: data.email,
|
|
201
|
+
user_id: data.user_id,
|
|
202
|
+
org_id: data.org_id,
|
|
203
|
+
};
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// network blip; keep polling
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
server.close();
|
|
212
|
+
if (!result || !result.api_key) {
|
|
213
|
+
(0, util_1.out)(` ${util_1.CROSS}`);
|
|
214
|
+
(0, util_1.out)(` ${util_1.CROSS} ${lastErr ?? 'Timed out waiting for authorization. Run `armoriq login` again.'}`);
|
|
215
|
+
return 1;
|
|
216
|
+
}
|
|
217
|
+
(0, credentials_1.saveCredentials)({
|
|
218
|
+
apiKey: result.api_key,
|
|
219
|
+
email: result.email ?? '',
|
|
220
|
+
userId: result.user_id ?? '',
|
|
221
|
+
orgId: result.org_id ?? '',
|
|
222
|
+
savedAt: new Date().toISOString(),
|
|
223
|
+
});
|
|
224
|
+
(0, util_1.out)(` ${util_1.CHECK}`);
|
|
225
|
+
(0, util_1.out)('');
|
|
226
|
+
(0, util_1.out)(` ${util_1.CHECK} Logged in as \x1b[1m${result.email ?? 'unknown'}\x1b[0m (org: ${result.org_id ?? 'unknown'})`);
|
|
227
|
+
(0, util_1.out)(` ${util_1.CHECK} API key saved to ${(0, credentials_1.getCredentialsPath)()}`);
|
|
228
|
+
(0, util_1.out)('');
|
|
229
|
+
return 0;
|
|
230
|
+
}
|
|
231
|
+
function cmdLogout() {
|
|
232
|
+
if ((0, credentials_1.clearCredentials)()) {
|
|
233
|
+
(0, util_1.out)(` ${util_1.CHECK} Credentials removed from ${(0, credentials_1.getCredentialsPath)()}`);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
(0, util_1.out)(' \x1b[2mNo credentials found — already logged out.\x1b[0m');
|
|
237
|
+
}
|
|
238
|
+
return 0;
|
|
239
|
+
}
|
|
240
|
+
function cmdWhoami() {
|
|
241
|
+
const creds = (0, credentials_1.loadCredentials)();
|
|
242
|
+
if (!creds) {
|
|
243
|
+
(0, util_1.out)(' \x1b[2mNot logged in. Run `armoriq login` to authenticate.\x1b[0m');
|
|
244
|
+
return 0;
|
|
245
|
+
}
|
|
246
|
+
(0, util_1.out)('');
|
|
247
|
+
(0, util_1.out)(' \x1b[1m\x1b[36m┃ ArmorIQ Credentials\x1b[0m');
|
|
248
|
+
(0, util_1.out)('');
|
|
249
|
+
const keyPreview = creds.apiKey.length > 16 ? creds.apiKey.slice(0, 16) + '...' : creds.apiKey;
|
|
250
|
+
(0, util_1.out)(` Email: \x1b[1m${creds.email || 'unknown'}\x1b[0m`);
|
|
251
|
+
(0, util_1.out)(` API Key: \x1b[2m${keyPreview}\x1b[0m`);
|
|
252
|
+
(0, util_1.out)(` User ID: \x1b[2m${creds.userId || 'n/a'}\x1b[0m`);
|
|
253
|
+
(0, util_1.out)(` Org ID: \x1b[2m${creds.orgId || 'n/a'}\x1b[0m`);
|
|
254
|
+
(0, util_1.out)(` Saved at: \x1b[2m${creds.savedAt || 'n/a'}\x1b[0m`);
|
|
255
|
+
(0, util_1.out)(` File: \x1b[2m${(0, credentials_1.getCredentialsPath)()}\x1b[0m`);
|
|
256
|
+
(0, util_1.out)('');
|
|
257
|
+
return 0;
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHH,4BA0GC;AAED,8BAOC;AAED,8BAkBC;AArPD,2CAA6B;AAC7B,yCAA2B;AAC3B,6BAA0B;AAC1B,iDAAqC;AACrC,kDAA0B;AAC1B,mDAM2B;AAC3B,kCAAyE;AAEzE,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;eAyBN,CAAC;AAEhB,SAAS,YAAY;IACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AASD,SAAS,mBAAmB,CAC1B,IAAY;IAEZ,IAAI,aAA0C,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,EAAE;QACnD,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;YACnE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtB,MAAM,MAAM,GAAmB;gBAC7B,OAAO,EAAE,MAAM,CAAC,GAAG;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;YACF,IAAI,MAAM,CAAC,OAAO;gBAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,SAAS,GAAG,GAAG;QACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,aAAa,GAAG,GAAG;YACrB,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;IAC5B,IAAA,oBAAI,EAAC,GAAG,EAAE,GAAG,EAAE;QACb,iBAAiB;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,IAAwC;IACrE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAA,kBAAW,GAAE,CAAC,CAAC,OAAO,CACxF,MAAM,EACN,EAAE,CACH,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE7C,IAAA,UAAG,EAAC,EAAE,CAAC,CAAC;IACR,IAAA,UAAG,EAAC,yCAAyC,CAAC,CAAC;IAC/C,IAAA,UAAG,EAAC,EAAE,CAAC,CAAC;IAER,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,oBAAoB,IAAI,WAAW,CAAC;IACxD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEjE,IAAI,EAAO,CAAC;IACZ,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,OAAO,mBAAmB,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7G,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,IAAA,UAAG,EAAC,KAAK,YAAK,mCAAoC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE,GAAG,EAAE,CAAC;IACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;IAEtD,MAAM,GAAG,GAAG,yBAAyB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAChE,IAAI,UAAU,GACZ,GAAG,yBAAyB,GAAG,GAAG,YAAY,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;IAClF,IAAI,YAAY;QAAE,UAAU,IAAI,QAAQ,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;IAE3E,IAAA,UAAG,EAAC,wBAAwB,CAAC,CAAC;IAC9B,WAAW,CAAC,UAAU,CAAC,CAAC;IACxB,IAAA,UAAG,EAAC,uCAAuC,CAAC,CAAC;IAC7C,IAAA,UAAG,EAAC,sBAAsB,UAAU,WAAW,CAAC,CAAC;IACjD,IAAA,UAAG,EAAC,+CAA+C,SAAS,WAAW,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/C,IAAI,MAAkC,CAAC;IACvC,IAAI,OAA2B,CAAC;IAEhC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACxC,wDAAwD;QACxD,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YACrC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAU,CAAC;YAC7D,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAU,CAAC;SAC/D,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC7C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YACpB,MAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,eAAK,CAAC,IAAI,CACzB,GAAG,OAAO,oBAAoB,EAC9B,EAAE,UAAU,EAAE,WAAW,EAAE,EAC3B,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAC/C,CAAC;YACF,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,IAAI,GAAG,KAAK,uBAAuB,IAAI,GAAG,KAAK,WAAW;gBAAE,SAAS;YACrE,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,GAAG,CAAC;gBACxC,MAAM;YACR,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,GAAG;oBACP,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC;gBACF,MAAM;YACR,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAA,UAAG,EAAC,IAAI,YAAK,EAAE,CAAC,CAAC;QACjB,IAAA,UAAG,EAAC,KAAK,YAAK,IAAI,OAAO,IAAI,iEAAiE,EAAE,CAAC,CAAC;QAClG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAA,6BAAe,EAAC;QACd,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC1B,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAClC,CAAC,CAAC;IACH,IAAA,UAAG,EAAC,IAAI,YAAK,EAAE,CAAC,CAAC;IACjB,IAAA,UAAG,EAAC,EAAE,CAAC,CAAC;IACR,IAAA,UAAG,EACD,KAAK,YAAK,wBAAwB,MAAM,CAAC,KAAK,IAAI,SAAS,iBAAiB,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG,CAC1G,CAAC;IACF,IAAA,UAAG,EAAC,KAAK,YAAK,qBAAqB,IAAA,gCAAkB,GAAE,EAAE,CAAC,CAAC;IAC3D,IAAA,UAAG,EAAC,EAAE,CAAC,CAAC;IACR,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,SAAS;IACvB,IAAI,IAAA,8BAAgB,GAAE,EAAE,CAAC;QACvB,IAAA,UAAG,EAAC,KAAK,YAAK,6BAA6B,IAAA,gCAAkB,GAAE,EAAE,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,IAAA,UAAG,EAAC,4DAA4D,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,SAAS;IACvB,MAAM,KAAK,GAAG,IAAA,6BAAe,GAAE,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAA,UAAG,EAAC,qEAAqE,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAA,UAAG,EAAC,EAAE,CAAC,CAAC;IACR,IAAA,UAAG,EAAC,+CAA+C,CAAC,CAAC;IACrD,IAAA,UAAG,EAAC,EAAE,CAAC,CAAC;IACR,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/F,IAAA,UAAG,EAAC,sBAAsB,KAAK,CAAC,KAAK,IAAI,SAAS,SAAS,CAAC,CAAC;IAC7D,IAAA,UAAG,EAAC,sBAAsB,UAAU,SAAS,CAAC,CAAC;IAC/C,IAAA,UAAG,EAAC,sBAAsB,KAAK,CAAC,MAAM,IAAI,KAAK,SAAS,CAAC,CAAC;IAC1D,IAAA,UAAG,EAAC,sBAAsB,KAAK,CAAC,KAAK,IAAI,KAAK,SAAS,CAAC,CAAC;IACzD,IAAA,UAAG,EAAC,sBAAsB,KAAK,CAAC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC;IAC3D,IAAA,UAAG,EAAC,sBAAsB,IAAA,gCAAkB,GAAE,SAAS,CAAC,CAAC;IACzD,IAAA,UAAG,EAAC,EAAE,CAAC,CAAC;IACR,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* armoriq keys list / revoke / prune — API key management.
|
|
3
|
+
* Mirrors PR #24 (TS) by symmetry; backend routes already exist:
|
|
4
|
+
* GET /api-keys (JwtAuthGuard — uses credentials JWT)
|
|
5
|
+
* POST /api-keys/:id/revoke (JwtAuthGuard)
|
|
6
|
+
*/
|
|
7
|
+
export declare function cmdKeysList(): Promise<number>;
|
|
8
|
+
export declare function cmdKeysRevoke(args: {
|
|
9
|
+
id: string;
|
|
10
|
+
}): Promise<number>;
|
|
11
|
+
export declare function cmdKeysPrune(args: {
|
|
12
|
+
yes?: boolean;
|
|
13
|
+
}): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiDH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA0BnD;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAOzE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C3E"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* armoriq keys list / revoke / prune — API key management.
|
|
4
|
+
* Mirrors PR #24 (TS) by symmetry; backend routes already exist:
|
|
5
|
+
* GET /api-keys (JwtAuthGuard — uses credentials JWT)
|
|
6
|
+
* POST /api-keys/:id/revoke (JwtAuthGuard)
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.cmdKeysList = cmdKeysList;
|
|
13
|
+
exports.cmdKeysRevoke = cmdKeysRevoke;
|
|
14
|
+
exports.cmdKeysPrune = cmdKeysPrune;
|
|
15
|
+
const axios_1 = __importDefault(require("axios"));
|
|
16
|
+
const util_1 = require("../util");
|
|
17
|
+
const state_1 = require("../state");
|
|
18
|
+
const KEY_COUNT_WARN_THRESHOLD = 8;
|
|
19
|
+
async function listKeys(apiKey) {
|
|
20
|
+
const url = `${(0, util_1.backendBase)()}/api-keys`;
|
|
21
|
+
const response = await axios_1.default.get(url, {
|
|
22
|
+
headers: { 'X-API-Key': apiKey },
|
|
23
|
+
timeout: 12000,
|
|
24
|
+
validateStatus: () => true,
|
|
25
|
+
});
|
|
26
|
+
if (response.status === 401)
|
|
27
|
+
throw new util_1.CLIError('API key rejected (401). Try `armoriq login` again.');
|
|
28
|
+
if (response.status >= 400)
|
|
29
|
+
throw new util_1.CLIError(`Failed to list keys (HTTP ${response.status}).`);
|
|
30
|
+
const data = response.data;
|
|
31
|
+
if (Array.isArray(data))
|
|
32
|
+
return data;
|
|
33
|
+
if (Array.isArray(data?.data))
|
|
34
|
+
return data.data;
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
async function revokeKey(apiKey, keyId) {
|
|
38
|
+
const url = `${(0, util_1.backendBase)()}/api-keys/${keyId}/revoke`;
|
|
39
|
+
const response = await axios_1.default.post(url, {}, {
|
|
40
|
+
headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/json' },
|
|
41
|
+
timeout: 12000,
|
|
42
|
+
validateStatus: () => true,
|
|
43
|
+
});
|
|
44
|
+
if (response.status === 401)
|
|
45
|
+
throw new util_1.CLIError('API key rejected (401). Try `armoriq login` again.');
|
|
46
|
+
if (response.status >= 400) {
|
|
47
|
+
throw new util_1.CLIError(`Failed to revoke key ${keyId} (HTTP ${response.status}): ${response.data?.message ?? ''}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function cmdKeysList() {
|
|
51
|
+
const creds = (0, util_1.requireCredentials)();
|
|
52
|
+
const keys = await listKeys(creds.apiKey);
|
|
53
|
+
if (keys.length === 0) {
|
|
54
|
+
(0, util_1.out)('No API keys found for this account.');
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
const nameW = Math.max('NAME'.length, ...keys.map((k) => (k.name ?? '').length));
|
|
58
|
+
const idW = Math.max('ID'.length, ...keys.map((k) => k.id.length));
|
|
59
|
+
(0, util_1.out)(` ${'NAME'.padEnd(nameW)} ${'ID'.padEnd(idW)} STATUS LAST USED`);
|
|
60
|
+
(0, util_1.out)(' ' + '-'.repeat(nameW + idW + 30));
|
|
61
|
+
for (const k of keys) {
|
|
62
|
+
const name = (k.name ?? '').padEnd(nameW);
|
|
63
|
+
const id = k.id.padEnd(idW);
|
|
64
|
+
const status = (k.status ?? 'unknown').padEnd(8);
|
|
65
|
+
const last = k.lastUsedAt ?? '-';
|
|
66
|
+
(0, util_1.out)(` ${name} ${id} ${status} ${last}`);
|
|
67
|
+
}
|
|
68
|
+
(0, util_1.out)('');
|
|
69
|
+
if (keys.length > KEY_COUNT_WARN_THRESHOLD) {
|
|
70
|
+
(0, util_1.out)(`\x1b[33m!\x1b[0m You have ${keys.length} API keys. Consider \`armoriq keys prune\` to revoke unused keys.`);
|
|
71
|
+
}
|
|
72
|
+
(0, state_1.appendLog)('keys-list', { count: keys.length });
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
async function cmdKeysRevoke(args) {
|
|
76
|
+
if (!args.id)
|
|
77
|
+
throw new util_1.CLIError('Key id is required: `armoriq keys revoke <id>`.');
|
|
78
|
+
const creds = (0, util_1.requireCredentials)();
|
|
79
|
+
await revokeKey(creds.apiKey, args.id);
|
|
80
|
+
(0, util_1.out)(`${util_1.CHECK} Revoked key ${args.id}.`);
|
|
81
|
+
(0, state_1.appendLog)('keys-revoke', { id: args.id });
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
async function cmdKeysPrune(args) {
|
|
85
|
+
const creds = (0, util_1.requireCredentials)();
|
|
86
|
+
const keys = await listKeys(creds.apiKey);
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
const candidates = keys.filter((k) => {
|
|
89
|
+
if (k.status && k.status.toLowerCase() === 'revoked')
|
|
90
|
+
return false;
|
|
91
|
+
if (k.id === creds.apiKey)
|
|
92
|
+
return false;
|
|
93
|
+
if (k.expiresAt && new Date(k.expiresAt).getTime() < now)
|
|
94
|
+
return true;
|
|
95
|
+
if (k.lastUsedAt) {
|
|
96
|
+
const ageDays = (now - new Date(k.lastUsedAt).getTime()) / 86400000;
|
|
97
|
+
if (ageDays > 90)
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
if (!k.lastUsedAt && k.createdAt) {
|
|
101
|
+
const ageDays = (now - new Date(k.createdAt).getTime()) / 86400000;
|
|
102
|
+
if (ageDays > 30)
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
});
|
|
107
|
+
if (candidates.length === 0) {
|
|
108
|
+
(0, util_1.out)('Nothing to prune — all keys are either active, recent, or already revoked.');
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
(0, util_1.out)(`Found ${candidates.length} prune candidate(s):`);
|
|
112
|
+
for (const k of candidates) {
|
|
113
|
+
(0, util_1.out)(` ${k.id} ${k.name ?? ''} (last used ${k.lastUsedAt ?? 'never'})`);
|
|
114
|
+
}
|
|
115
|
+
if (!args.yes) {
|
|
116
|
+
(0, util_1.out)('');
|
|
117
|
+
(0, util_1.out)('Re-run with --yes to actually revoke these.');
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
for (const k of candidates) {
|
|
121
|
+
try {
|
|
122
|
+
await revokeKey(creds.apiKey, k.id);
|
|
123
|
+
(0, util_1.out)(`${util_1.CHECK} Revoked ${k.id}`);
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
(0, util_1.out)(`\x1b[31m✘\x1b[0m Failed to revoke ${k.id}: ${e.message}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
(0, state_1.appendLog)('keys-prune', { revoked: candidates.length });
|
|
130
|
+
return 0;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/cli/commands/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* armoriq orgs / switch-org — list and switch ArmorIQ organizations.
|
|
3
|
+
* Mirrors armoriq_sdk/cli.py:cmd_orgs / cmd_switch_org.
|
|
4
|
+
*/
|
|
5
|
+
export declare function cmdOrgs(): Promise<number>;
|
|
6
|
+
export declare function cmdSwitchOrg(args: {
|
|
7
|
+
org: string;
|
|
8
|
+
keyName?: string;
|
|
9
|
+
}): Promise<number>;
|
|
10
|
+
//# sourceMappingURL=orgs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orgs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/orgs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,wBAAsB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CA0C/C;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyD3F"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* armoriq orgs / switch-org — list and switch ArmorIQ organizations.
|
|
4
|
+
* Mirrors armoriq_sdk/cli.py:cmd_orgs / cmd_switch_org.
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.cmdOrgs = cmdOrgs;
|
|
44
|
+
exports.cmdSwitchOrg = cmdSwitchOrg;
|
|
45
|
+
const axios_1 = __importDefault(require("axios"));
|
|
46
|
+
const credentials_1 = require("../../credentials");
|
|
47
|
+
const util_1 = require("../util");
|
|
48
|
+
const state_1 = require("../state");
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
async function cmdOrgs() {
|
|
51
|
+
const creds = (0, util_1.requireCredentials)();
|
|
52
|
+
const url = `${(0, util_1.backendBase)()}/iap/sdk/orgs`;
|
|
53
|
+
let response;
|
|
54
|
+
try {
|
|
55
|
+
response = await axios_1.default.get(url, {
|
|
56
|
+
headers: { 'X-API-Key': creds.apiKey },
|
|
57
|
+
timeout: 12000,
|
|
58
|
+
validateStatus: () => true,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
throw new util_1.CLIError(`Failed to reach ${url}: ${e.message}`);
|
|
63
|
+
}
|
|
64
|
+
if (response.status === 401) {
|
|
65
|
+
throw new util_1.CLIError('API key rejected (401). Try `armoriq login` again.');
|
|
66
|
+
}
|
|
67
|
+
if (response.status >= 400) {
|
|
68
|
+
throw new util_1.CLIError(`Failed to list orgs (HTTP ${response.status}).`);
|
|
69
|
+
}
|
|
70
|
+
const orgs = response.data?.data ?? [];
|
|
71
|
+
if (orgs.length === 0) {
|
|
72
|
+
(0, util_1.out)("You don't belong to any organizations.");
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
const nameW = Math.max('NAME'.length, ...orgs.map((o) => (o.name ?? '').length));
|
|
76
|
+
const roleW = Math.max('ROLE'.length, ...orgs.map((o) => (o.userRole ?? '').length));
|
|
77
|
+
const header = ` ${'NAME'.padEnd(nameW)} ${'ORG_ID'.padEnd(36)} ${'ROLE'.padEnd(roleW)} MEMBERS`;
|
|
78
|
+
(0, util_1.out)(header);
|
|
79
|
+
(0, util_1.out)(' ' + '-'.repeat(header.length - 2));
|
|
80
|
+
for (const org of orgs) {
|
|
81
|
+
const marker = org.active ? `${util_1.CHECK} ` : ' ';
|
|
82
|
+
const name = (org.name ?? '').padEnd(nameW);
|
|
83
|
+
const orgId = (org.orgId ?? '').padEnd(36);
|
|
84
|
+
const role = (org.userRole ?? '').padEnd(roleW);
|
|
85
|
+
const members = String(org.memberCount ?? 0);
|
|
86
|
+
(0, util_1.out)(`${marker}${name} ${orgId} ${role} ${members}`);
|
|
87
|
+
}
|
|
88
|
+
(0, util_1.out)('');
|
|
89
|
+
(0, util_1.out)(`Active org is marked with ${util_1.CHECK}. Switch with \`armoriq switch-org <name-or-id>\`.`);
|
|
90
|
+
(0, state_1.appendLog)('orgs', { count: orgs.length });
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
async function cmdSwitchOrg(args) {
|
|
94
|
+
const creds = (0, util_1.requireCredentials)();
|
|
95
|
+
const target = (args.org ?? '').trim();
|
|
96
|
+
if (!target)
|
|
97
|
+
throw new util_1.CLIError('Target org (id or name) is required.');
|
|
98
|
+
const url = `${(0, util_1.backendBase)()}/iap/sdk/switch-org`;
|
|
99
|
+
const body = { org: target };
|
|
100
|
+
if (args.keyName)
|
|
101
|
+
body.keyName = args.keyName;
|
|
102
|
+
let response;
|
|
103
|
+
try {
|
|
104
|
+
response = await axios_1.default.post(url, body, {
|
|
105
|
+
headers: { 'X-API-Key': creds.apiKey, 'Content-Type': 'application/json' },
|
|
106
|
+
timeout: 12000,
|
|
107
|
+
validateStatus: () => true,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
throw new util_1.CLIError(`Failed to reach ${url}: ${e.message}`);
|
|
112
|
+
}
|
|
113
|
+
if (response.status === 401)
|
|
114
|
+
throw new util_1.CLIError('API key rejected (401). Try `armoriq login` again.');
|
|
115
|
+
if (response.status === 403)
|
|
116
|
+
throw new util_1.CLIError(`You are not a member of '${target}'.`);
|
|
117
|
+
if (response.status === 404)
|
|
118
|
+
throw new util_1.CLIError(`No organization named '${target}' (or matching that id).`);
|
|
119
|
+
if (response.status === 400) {
|
|
120
|
+
throw new util_1.CLIError(response.data?.message || 'Bad request.');
|
|
121
|
+
}
|
|
122
|
+
if (response.status >= 400) {
|
|
123
|
+
throw new util_1.CLIError(`Switch failed (HTTP ${response.status}).`);
|
|
124
|
+
}
|
|
125
|
+
const payload = response.data ?? {};
|
|
126
|
+
const newApiKey = payload.api_key;
|
|
127
|
+
const newOrgId = payload.org_id;
|
|
128
|
+
const newOrgName = payload.org_name ?? target;
|
|
129
|
+
if (!newApiKey || !newOrgId) {
|
|
130
|
+
throw new util_1.CLIError('Switch response missing api_key or org_id.');
|
|
131
|
+
}
|
|
132
|
+
(0, credentials_1.saveCredentials)({
|
|
133
|
+
apiKey: newApiKey,
|
|
134
|
+
email: creds.email,
|
|
135
|
+
userId: creds.userId,
|
|
136
|
+
orgId: newOrgId,
|
|
137
|
+
savedAt: new Date().toISOString(),
|
|
138
|
+
});
|
|
139
|
+
// Agent registration (state.json) was org-scoped — invalidate it so the
|
|
140
|
+
// next step is obvious.
|
|
141
|
+
const stateExisted = fs.existsSync(state_1.STATE_FILE);
|
|
142
|
+
if (stateExisted)
|
|
143
|
+
(0, state_1.clearState)();
|
|
144
|
+
(0, util_1.out)(`${util_1.CHECK} Switched to ${newOrgName} (org_id=${newOrgId})`);
|
|
145
|
+
(0, util_1.out)(`${util_1.CHECK} New API key saved.`);
|
|
146
|
+
if (stateExisted) {
|
|
147
|
+
(0, util_1.out)(' Previous agent registration cleared. Re-run `armoriq register` in this org.');
|
|
148
|
+
}
|
|
149
|
+
(0, state_1.appendLog)('switch-org', { org_id: newOrgId, org_name: newOrgName, cleared_state: stateExisted });
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=orgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../../src/cli/commands/orgs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* armoriq status / logs — local-only commands that read the cached state
|
|
3
|
+
* and CLI log file. Mirrors armoriq_sdk/cli.py:cmd_status / cmd_logs.
|
|
4
|
+
*/
|
|
5
|
+
export declare function cmdStatus(): number;
|
|
6
|
+
export declare function cmdLogs(args: {
|
|
7
|
+
follow?: boolean;
|
|
8
|
+
}): number;
|
|
9
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,wBAAgB,SAAS,IAAI,MAAM,CAclC;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAsC1D"}
|