@klevar/portal-cli 0.1.8 → 0.1.9
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 +2 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/portal.js +2 -2
- package/dist/commands/portal.js.map +1 -1
- package/dist/commands/system.d.ts +1 -0
- package/dist/commands/system.js +2 -2
- package/dist/commands/system.js.map +1 -1
- package/dist/lib/legacy-runner.js +20 -5
- package/package.json +1 -1
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.
|
package/dist/commands/index.d.ts
CHANGED
package/dist/commands/portal.js
CHANGED
|
@@ -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
|
|
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":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,4BAA4B,EAAE;IACtH,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAC9H,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,sBAAsB,EAAE;IAC5H,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,qBAAqB,EAAE;IAC9H,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC9I,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC9I,sBAAsB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qDAAqD,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,6BAA6B,EAAE;IACvK,wBAAwB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qDAAqD,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9L,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,uBAAuB,EAAE,WAAW,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"portal.js","sourceRoot":"","sources":["../../commands/portal.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/system.js
CHANGED
|
@@ -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,
|
|
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"}
|
|
@@ -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; }
|
|
@@ -669,13 +678,15 @@ if (!resource || resource === 'help' || resource === '--help') {
|
|
|
669
678
|
for (const [key, cmd] of Object.entries(COMMANDS)) {
|
|
670
679
|
const [res, act] = key.includes('.') ? key.split('.') : [key, ''];
|
|
671
680
|
if (!grouped[res]) grouped[res] = [];
|
|
672
|
-
grouped[res].push({ key, action: act, desc: (cmd.description || cmd.desc), body: cmd.body });
|
|
681
|
+
grouped[res].push({ key, action: act, desc: (cmd.description || cmd.desc), body: cmd.body, queryParams: cmd.queryParams });
|
|
673
682
|
}
|
|
674
683
|
for (const [res, cmds] of Object.entries(grouped)) {
|
|
675
684
|
console.log(`\n ${res}:`);
|
|
676
685
|
for (const c of cmds) {
|
|
677
|
-
const bodyHint = c.body ?
|
|
678
|
-
|
|
686
|
+
const bodyHint = c.body ? c.body.map(b => helpFlag(c.key, b)) : [];
|
|
687
|
+
const queryHint = c.queryParams ? c.queryParams.map(q => helpQueryFlag(q)) : [];
|
|
688
|
+
const flagHint = [...bodyHint, ...queryHint];
|
|
689
|
+
console.log(` ${c.action || '(default)'} — ${c.desc}${flagHint.length ? ` [${flagHint.join(' ')}]` : ''}`);
|
|
679
690
|
}
|
|
680
691
|
}
|
|
681
692
|
console.log(`\nConfig: PORTAL_API_URL, PORTAL_API_KEY, PORTAL_TOKEN (or ~/.klevar/portal.env)`);
|
|
@@ -716,6 +727,7 @@ if (flags['api-url']) BASE_URL = flags['api-url'];
|
|
|
716
727
|
if (flags['api-key']) API_KEY = flags['api-key'];
|
|
717
728
|
if (flags['portal-token']) PORTAL_TOKEN = flags['portal-token'];
|
|
718
729
|
OUTPUT_JSON = flags.json === 'true';
|
|
730
|
+
COMPACT_JSON = flags.compact === 'true';
|
|
719
731
|
const id = positional[0];
|
|
720
732
|
|
|
721
733
|
// Interpolate path
|
|
@@ -740,7 +752,10 @@ if (cmd.queryParams || cmd.fixedQuery) {
|
|
|
740
752
|
params.set(key, value);
|
|
741
753
|
}
|
|
742
754
|
for (const key of cmd.queryParams || []) {
|
|
743
|
-
|
|
755
|
+
const aliases = key.split('|');
|
|
756
|
+
const canonical = aliases[0];
|
|
757
|
+
const value = aliases.map((alias) => flags[alias]).find((candidate) => candidate !== undefined);
|
|
758
|
+
if (value !== undefined) params.set(canonical, value);
|
|
744
759
|
}
|
|
745
760
|
const qs = params.toString();
|
|
746
761
|
if (qs) path += (path.includes('?') ? '&' : '?') + qs;
|