@klevar/portal-cli 0.1.8 → 0.1.10

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 CHANGED
@@ -41,7 +41,9 @@ npx @klevar/portal-cli clients create --name "Stefan" --email "stefan@example.de
41
41
  npx @klevar/portal-cli projects create <clientId> --name "Idealo" --externalRef "idealo:ksh.de"
42
42
  npx @klevar/portal-cli metrics push --external_ref "idealo:ksh.de" --source_ref "run:33" --snapshot_date "2026-04-12" --metrics '{"score":88}'
43
43
  npx @klevar/portal-cli portal me --portal-token "<client-token>"
44
+ npx @klevar/portal-cli portal search --query "maintenance" --portal-token "<client-token>"
44
45
  npx @klevar/portal-cli portal tasks <projectId> --portal-token "<client-token>"
46
+ npx @klevar/portal-cli clients get <clientId> --json --compact
45
47
  ```
46
48
 
47
49
  `portal my-tasks` lists requests submitted by the client across projects. `portal tasks <projectId>` lists the tasks shown on that project detail page, including admin-created project tasks that are visible in the client portal.
@@ -56,6 +56,7 @@ export declare const COMMAND_GROUPS: {
56
56
  path: string;
57
57
  auth: "apiKey";
58
58
  description: string;
59
+ queryParams: string[];
59
60
  };
60
61
  };
61
62
  clients: {
@@ -7,8 +7,8 @@ export const portalCommands = {
7
7
  'portal.updates': { method: 'GET', path: '/api/portal/projects/:id/updates', auth: 'portalToken', description: 'List portal project updates' },
8
8
  'portal.comments.list': { method: 'GET', path: '/api/portal/projects/:id/updates/:updateId/comments', auth: 'portalToken', description: 'List portal update comments' },
9
9
  'portal.comments.create': { method: 'POST', path: '/api/portal/projects/:id/updates/:updateId/comments', auth: 'portalToken', description: 'Create portal update comment', body: ['content'] },
10
- 'portal.search': { method: 'GET', path: '/api/portal/search', auth: 'portalToken', description: 'Search portal content', queryParams: ['q'] },
11
- 'portal.my-tasks': { method: 'GET', path: '/api/portal/tasks/mine', auth: 'portalToken', description: 'List my portal tasks' },
10
+ 'portal.search': { method: 'GET', path: '/api/portal/search', auth: 'portalToken', description: 'Search portal content', queryParams: ['q|query'] },
11
+ 'portal.my-tasks': { method: 'GET', path: '/api/portal/tasks/mine', auth: 'portalToken', description: 'List client-submitted portal requests' },
12
12
  'portal.tasks': { method: 'GET', path: '/api/portal/projects/:id/tasks', auth: 'portalToken', description: 'List portal project tasks' },
13
13
  'portal.tasks.create': { method: 'POST', path: '/api/portal/projects/:id/tasks', auth: 'portalToken', description: 'Create portal task', body: ['title', 'description', 'priority'] },
14
14
  'portal.tasks.delete': { method: 'DELETE', path: '/api/portal/projects/:id/tasks/:taskId', auth: 'portalToken', description: 'Delete portal task' },
@@ -1 +1 @@
1
- {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../commands/portal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../commands/portal.ts"],"names":[],"mappings":"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"}
@@ -53,5 +53,6 @@ export declare const systemCommands: {
53
53
  path: string;
54
54
  auth: "apiKey";
55
55
  description: string;
56
+ queryParams: string[];
56
57
  };
57
58
  };
@@ -6,7 +6,7 @@ export const systemCommands = {
6
6
  'tenant.info': { method: 'GET', path: '/api/tenants/me', auth: 'apiKey', description: 'Show tenant metadata' },
7
7
  dashboard: { method: 'GET', path: '/api/admin/dashboard', auth: 'apiKey', description: 'Show dashboard stats' },
8
8
  'dashboard.stats': { method: 'GET', path: '/api/admin/dashboard', auth: 'apiKey', description: 'Show dashboard stats' },
9
- search: { method: 'GET', path: '/api/admin/search', auth: 'apiKey', description: 'Search admin content', queryParams: ['q'] },
10
- 'search.admin': { method: 'GET', path: '/api/admin/search', auth: 'apiKey', description: 'Search admin content' },
9
+ search: { method: 'GET', path: '/api/admin/search', auth: 'apiKey', description: 'Search admin content', queryParams: ['q|query'] },
10
+ 'search.admin': { method: 'GET', path: '/api/admin/search', auth: 'apiKey', description: 'Search admin content', queryParams: ['q|query'] },
11
11
  };
12
12
  //# sourceMappingURL=system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../commands/system.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAC3F,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;IACpG,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;IACxG,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAC3G,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IAC9G,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IAC/G,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IACvH,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE;IAC7H,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;CAC3F,CAAC"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../commands/system.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;IAC3F,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;IACpG,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;IACxG,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAC3G,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IAC9G,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IAC/G,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IACvH,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE;IACnI,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE;CACrH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  export const updateCommands = {
2
2
  'updates.list': { method: 'GET', path: '/api/admin/projects/:id/updates', auth: 'apiKey', description: 'List updates' },
3
3
  'updates.create': { method: 'POST', path: '/api/admin/projects/:id/updates', auth: 'apiKey', description: 'Create update', body: ['content', 'visibility', 'author'], supportsFiles: true },
4
- 'updates.update': { method: 'PATCH', path: '/api/admin/updates/:updateId', auth: 'apiKey', description: 'Update update', body: ['content', 'visibility'] },
4
+ 'updates.update': { method: 'PATCH', path: '/api/admin/updates/:updateId', auth: 'apiKey', description: 'Edit an existing update in place', body: ['content', 'visibility'] },
5
5
  'updates.delete': { method: 'DELETE', path: '/api/admin/updates/:updateId', auth: 'apiKey', description: 'Delete update' },
6
6
  'comments.list': { method: 'GET', path: '/api/admin/projects/:id/updates/:updateId/comments', auth: 'apiKey', description: 'List update comments' },
7
7
  'comments.create': { method: 'POST', path: '/api/admin/projects/:id/updates/:updateId/comments', auth: 'apiKey', description: 'Create update comment', body: ['content'] },
@@ -1 +1 @@
1
- {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../commands/updates.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;IACvH,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE;IAC3L,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;IAC1J,gBAAgB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;IAC1H,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oDAAoD,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IACnJ,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oDAAoD,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE;CACpJ,CAAC"}
1
+ {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../commands/updates.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;IACvH,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE;IAC3L,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;IAC7K,gBAAgB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;IAC1H,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oDAAoD,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IACnJ,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,oDAAoD,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE;CACpJ,CAAC"}
@@ -66,6 +66,7 @@ let PORTAL_TOKEN =
66
66
  envFile.PORTAL_TOKEN ||
67
67
  envFile.PORTAL_PORTAL_TOKEN;
68
68
  let OUTPUT_JSON = false;
69
+ let COMPACT_JSON = false;
69
70
 
70
71
  function requireApiKey() {
71
72
  if (!API_KEY) {
@@ -307,11 +308,19 @@ function helpFlag(commandKey, field) {
307
308
  return hint ? `--${field} ${hint}` : `--${field}`;
308
309
  }
309
310
 
311
+ function helpQueryFlag(field) {
312
+ const aliases = field.split('|');
313
+ if (aliases.length > 1) {
314
+ return aliases.map((alias) => `--${alias}`).join('|');
315
+ }
316
+ return `--${field}`;
317
+ }
318
+
310
319
  // ── Output Formatting ───────────────────────────────────────────
311
320
 
312
321
  function formatOutput(data, commandKey) {
313
322
  if (OUTPUT_JSON) {
314
- console.log(JSON.stringify(data, null, 2));
323
+ console.log(COMPACT_JSON ? JSON.stringify(data) : JSON.stringify(data, null, 2));
315
324
  return;
316
325
  }
317
326
  if (!data) { console.log('Done.'); return; }
@@ -614,7 +623,9 @@ function formatOutput(data, commandKey) {
614
623
  if (data.update) {
615
624
  const u = data.update;
616
625
  const vis = u.visibility === 'internal' ? ' [INTERNAL]' : '';
617
- console.log(`Update posted${vis}: ${u.content.slice(0, 80)}${u.content.length > 80 ? '...' : ''} [${u.id}]`);
626
+ const action = commandKey === 'updates.update' ? 'Update edited in place' : 'Update posted';
627
+ const edited = commandKey === 'updates.update' && u.editedAt ? ` (edited ${u.editedAt})` : '';
628
+ console.log(`${action}${vis}: ${u.content.slice(0, 80)}${u.content.length > 80 ? '...' : ''} [${u.id}]${edited}`);
618
629
  return;
619
630
  }
620
631
  if (data.portalToken) {
@@ -669,13 +680,15 @@ if (!resource || resource === 'help' || resource === '--help') {
669
680
  for (const [key, cmd] of Object.entries(COMMANDS)) {
670
681
  const [res, act] = key.includes('.') ? key.split('.') : [key, ''];
671
682
  if (!grouped[res]) grouped[res] = [];
672
- grouped[res].push({ key, action: act, desc: (cmd.description || cmd.desc), body: cmd.body });
683
+ grouped[res].push({ key, action: act, desc: (cmd.description || cmd.desc), body: cmd.body, queryParams: cmd.queryParams });
673
684
  }
674
685
  for (const [res, cmds] of Object.entries(grouped)) {
675
686
  console.log(`\n ${res}:`);
676
687
  for (const c of cmds) {
677
- const bodyHint = c.body ? ` [${c.body.map(b => helpFlag(c.key, b)).join(' ')}]` : '';
678
- console.log(` ${c.action || '(default)'} — ${c.desc}${bodyHint}`);
688
+ const bodyHint = c.body ? c.body.map(b => helpFlag(c.key, b)) : [];
689
+ const queryHint = c.queryParams ? c.queryParams.map(q => helpQueryFlag(q)) : [];
690
+ const flagHint = [...bodyHint, ...queryHint];
691
+ console.log(` ${c.action || '(default)'} — ${c.desc}${flagHint.length ? ` [${flagHint.join(' ')}]` : ''}`);
679
692
  }
680
693
  }
681
694
  console.log(`\nConfig: PORTAL_API_URL, PORTAL_API_KEY, PORTAL_TOKEN (or ~/.klevar/portal.env)`);
@@ -716,6 +729,7 @@ if (flags['api-url']) BASE_URL = flags['api-url'];
716
729
  if (flags['api-key']) API_KEY = flags['api-key'];
717
730
  if (flags['portal-token']) PORTAL_TOKEN = flags['portal-token'];
718
731
  OUTPUT_JSON = flags.json === 'true';
732
+ COMPACT_JSON = flags.compact === 'true';
719
733
  const id = positional[0];
720
734
 
721
735
  // Interpolate path
@@ -740,7 +754,10 @@ if (cmd.queryParams || cmd.fixedQuery) {
740
754
  params.set(key, value);
741
755
  }
742
756
  for (const key of cmd.queryParams || []) {
743
- if (flags[key]) params.set(key, flags[key]);
757
+ const aliases = key.split('|');
758
+ const canonical = aliases[0];
759
+ const value = aliases.map((alias) => flags[alias]).find((candidate) => candidate !== undefined);
760
+ if (value !== undefined) params.set(canonical, value);
744
761
  }
745
762
  const qs = params.toString();
746
763
  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.8",
3
+ "version": "0.1.10",
4
4
  "description": "First-class npm CLI for the Klevar Client Management Portal",
5
5
  "type": "module",
6
6
  "bin": {