@klevar/portal-cli 0.1.21 → 0.1.22

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.
@@ -580,6 +580,7 @@ export declare const COMMAND_GROUPS: {
580
580
  path: string;
581
581
  auth: "apiKey";
582
582
  description: string;
583
+ queryParams: string[];
583
584
  };
584
585
  'smoke.portal': {
585
586
  method: "GET";
@@ -56,6 +56,7 @@ export declare const operatorCommands: {
56
56
  path: string;
57
57
  auth: "apiKey";
58
58
  description: string;
59
+ queryParams: string[];
59
60
  };
60
61
  'smoke.portal': {
61
62
  method: "GET";
@@ -34,8 +34,8 @@ export const operatorCommands = {
34
34
  method: 'GET',
35
35
  path: '/api/admin/clients/:clientId/reports/monthly',
36
36
  auth: 'apiKey',
37
- description: 'Generate monthly client report',
38
- queryParams: ['period'],
37
+ description: 'Generate monthly client report; optionally scope with --project',
38
+ queryParams: ['period', 'projectId|project'],
39
39
  },
40
40
  'client.timeline': {
41
41
  method: 'GET',
@@ -55,7 +55,8 @@ export const operatorCommands = {
55
55
  method: 'GET',
56
56
  path: '/api/admin/ops-health',
57
57
  auth: 'apiKey',
58
- description: 'Show operational health summary',
58
+ description: 'Show operational health summary; exits 1 only for critical unless --no-fail or --warn-only is set',
59
+ queryParams: ['noFail|no-fail', 'warnOnly|warn-only'],
59
60
  },
60
61
  'smoke.portal': {
61
62
  method: 'GET',
@@ -1 +1 @@
1
- {"version":3,"file":"operator.js","sourceRoot":"","sources":["../../commands/operator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operator.js","sourceRoot":"","sources":["../../commands/operator.ts"],"names":[],"mappings":"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"}
@@ -312,6 +312,7 @@ function pathParamEntity(commandKey, paramName) {
312
312
  if (paramName.toLowerCase().includes('project')) return 'project';
313
313
  if (paramName === 'id' && commandKey.startsWith('clients.')) return 'client';
314
314
  if (paramName === 'id' && commandKey.startsWith('projects.')) return 'project';
315
+ if (paramName === 'id' && (commandKey === 'smoke.portal' || commandKey === 'smoke.docs')) return 'client';
315
316
  return null;
316
317
  }
317
318
 
@@ -320,8 +321,8 @@ async function resolveNameParam(commandKey, paramName, value, flags) {
320
321
  const entity = pathParamEntity(commandKey, paramName);
321
322
  if (!entity) return value;
322
323
  const params = new URLSearchParams({ q: value, type: entity, limit: '10' });
323
- if (entity === 'project' && flags.client) params.set('client', flags.client);
324
324
  if (entity === 'project' && flags.clientId) params.set('clientId', flags.clientId);
325
+ else if (entity === 'project' && flags.client) params.set('client', flags.client);
325
326
  const data = await api('GET', `/api/admin/search?${params.toString()}`);
326
327
  const rows = entity === 'client' ? (data.clients || []) : (data.projects || []);
327
328
  const exact = rows.filter((row) => (row.name || '').toLowerCase() === value.toLowerCase());
@@ -335,6 +336,13 @@ async function resolveNameParam(commandKey, paramName, value, flags) {
335
336
  exitGracefully(2);
336
337
  }
337
338
 
339
+ async function resolveQueryNameParam(commandKey, canonical, value, flags) {
340
+ if (!value || looksLikeOpaqueId(value)) return value;
341
+ if (canonical === 'clientId') return resolveNameParam(commandKey, 'clientId', value, flags);
342
+ if (canonical === 'projectId') return resolveNameParam(commandKey, 'projectId', value, flags);
343
+ return value;
344
+ }
345
+
338
346
  const HELP_ENUMS = {
339
347
  priority: 'low|normal|high|urgent',
340
348
  submittedBy: 'client|admin|va|system',
@@ -396,7 +404,7 @@ function helpQueryFlag(field) {
396
404
  function formatOutput(data, commandKey) {
397
405
  if (commandKey === 'ops-health' && OUTPUT_JSON) {
398
406
  console.log(COMPACT_JSON ? JSON.stringify(data) : JSON.stringify(data, null, 2));
399
- if (data.status === 'critical') exitGracefully(1);
407
+ if (data.status === 'critical' && flags.noFail !== 'true' && flags['no-fail'] !== 'true' && flags.warnOnly !== 'true' && flags['warn-only'] !== 'true') exitGracefully(1);
400
408
  return;
401
409
  }
402
410
  if (OUTPUT_JSON) {
@@ -518,7 +526,7 @@ function formatOutput(data, commandKey) {
518
526
  for (const [key, value] of Object.entries(data.failures || {})) {
519
527
  console.log(` ${key}: ${value}`);
520
528
  }
521
- if (data.status === 'critical') exitGracefully(1);
529
+ if (data.status === 'critical' && flags.noFail !== 'true' && flags['no-fail'] !== 'true' && flags.warnOnly !== 'true' && flags['warn-only'] !== 'true') exitGracefully(1);
522
530
  return;
523
531
  }
524
532
 
@@ -561,7 +569,7 @@ function formatOutput(data, commandKey) {
561
569
 
562
570
  if (commandKey === 'audit.list' || commandKey === 'audit.target') {
563
571
  const items = data.data || [];
564
- if (items.length === 0) { console.log('No audit events found.'); return; }
572
+ if (items.length === 0) { console.log('No audit events found. Audit records operator actions from this release forward; older actions are not backfilled.'); return; }
565
573
  console.log(`\nAudit Events (${items.length})`);
566
574
  console.log('-'.repeat(80));
567
575
  for (const item of items) {
@@ -1010,8 +1018,13 @@ if (cmd.queryParams || cmd.fixedQuery) {
1010
1018
  for (const key of cmd.queryParams || []) {
1011
1019
  const aliases = key.split('|');
1012
1020
  const canonical = aliases[0];
1013
- const value = aliases.map((alias) => flags[alias]).find((candidate) => candidate !== undefined);
1014
- if (value !== undefined) params.set(canonical, value);
1021
+ let value = aliases.map((alias) => flags[alias]).find((candidate) => candidate !== undefined);
1022
+ if (value !== undefined) {
1023
+ value = await resolveQueryNameParam(commandKey, canonical, value, flags);
1024
+ flags[canonical] = value;
1025
+ for (const alias of aliases) flags[alias] = value;
1026
+ params.set(canonical, value);
1027
+ }
1015
1028
  }
1016
1029
  const qs = params.toString();
1017
1030
  if (qs) path += (path.includes('?') ? '&' : '?') + qs;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@klevar/portal-cli",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "description": "First-class npm CLI for the Klevar Client Management Portal",
5
5
  "type": "module",
6
6
  "bin": {