@reporting-bi/cli 0.0.2 → 0.0.3
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 +21 -10
- package/dist/index.js +543 -13
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -29,18 +29,28 @@ Originally built for browser use (`rp-app-auth` login page), it may require adap
|
|
|
29
29
|
|
|
30
30
|
**Important:** `rp-vscode` currently has its own auth implementation (`src/auth.ts`) with VS Code-specific OAuth2 flow (local HTTP callback server, VS Code secrets storage). This will be refactored to use `rp-auth-client-v2` instead, keeping only VS Code-specific concerns (secrets API, URI handler) in the extension.
|
|
31
31
|
|
|
32
|
-
##
|
|
32
|
+
## Features
|
|
33
33
|
|
|
34
|
-
- **Authentication** —
|
|
35
|
-
- **ETL
|
|
36
|
-
- **
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
34
|
+
- **Authentication** — OAuth2 login via browser, token storage & refresh
|
|
35
|
+
- **ETL** — List, view, search, and execute ETL threads
|
|
36
|
+
- **Jobs** — List, start, stop, and monitor SQL Agent jobs
|
|
37
|
+
- **Analytics** — Browse report contexts, execute reports, list dimensions/years
|
|
38
|
+
- **Users** — List users, view profiles, check access rights and roles
|
|
39
|
+
- **Definition** — Browse statements, dimensions, modules, scenarios, fiscal years
|
|
40
|
+
- **MDM** — Browse master data tables, view values, export as CSV
|
|
41
|
+
- **Helpdesk** — List/view tickets, read messages, create new tickets
|
|
42
|
+
- **Wiki** — Full CRUD for wiki pages (list, read, search, save, delete)
|
|
43
|
+
- **Accounting** — List and switch between accountings
|
|
44
|
+
|
|
45
|
+
All commands output formatted tables by default, with `--json` flag for raw JSON output.
|
|
46
|
+
|
|
47
|
+
## Installation
|
|
48
|
+
|
|
49
|
+
See [INSTALL.md](INSTALL.md) for installation instructions.
|
|
40
50
|
|
|
41
51
|
## Tech Stack
|
|
42
52
|
|
|
43
|
-
- Node.js + TypeScript
|
|
53
|
+
- Node.js + TypeScript, bundled with esbuild (zero runtime dependencies)
|
|
44
54
|
- `@reporting/rp-auth-client-v2` — Shared authentication client (OAuth2)
|
|
45
55
|
- `@reporting/rp-client` — HTTP client for Reporting.bi microservices
|
|
46
56
|
- `@reporting/rp-types` — Shared TypeScript types
|
|
@@ -48,6 +58,7 @@ Originally built for browser use (`rp-app-auth` login page), it may require adap
|
|
|
48
58
|
## Development
|
|
49
59
|
|
|
50
60
|
```bash
|
|
51
|
-
yarn build #
|
|
52
|
-
yarn watch #
|
|
61
|
+
yarn build # bundle with esbuild
|
|
62
|
+
yarn watch # bundle in watch mode
|
|
63
|
+
yarn release # bump version, build, commit, push, publish to npm
|
|
53
64
|
```
|
package/dist/index.js
CHANGED
|
@@ -663,16 +663,16 @@ var require_side_channel_list = __commonJS({
|
|
|
663
663
|
"use strict";
|
|
664
664
|
var inspect = require_object_inspect();
|
|
665
665
|
var $TypeError = require_type();
|
|
666
|
-
var listGetNode = function(
|
|
667
|
-
var prev =
|
|
666
|
+
var listGetNode = function(list7, key, isDelete) {
|
|
667
|
+
var prev = list7;
|
|
668
668
|
var curr;
|
|
669
669
|
for (; (curr = prev.next) != null; prev = curr) {
|
|
670
670
|
if (curr.key === key) {
|
|
671
671
|
prev.next = curr.next;
|
|
672
672
|
if (!isDelete) {
|
|
673
673
|
curr.next = /** @type {NonNullable<typeof list.next>} */
|
|
674
|
-
|
|
675
|
-
|
|
674
|
+
list7.next;
|
|
675
|
+
list7.next = curr;
|
|
676
676
|
}
|
|
677
677
|
return curr;
|
|
678
678
|
}
|
|
@@ -2106,9 +2106,9 @@ var require_stringify = __commonJS({
|
|
|
2106
2106
|
}
|
|
2107
2107
|
return [formatter(prefix) + "=" + formatter(String(obj))];
|
|
2108
2108
|
}
|
|
2109
|
-
var
|
|
2109
|
+
var values2 = [];
|
|
2110
2110
|
if (typeof obj === "undefined") {
|
|
2111
|
-
return
|
|
2111
|
+
return values2;
|
|
2112
2112
|
}
|
|
2113
2113
|
var objKeys;
|
|
2114
2114
|
if (generateArrayPrefix === "comma" && isArray(obj)) {
|
|
@@ -2138,7 +2138,7 @@ var require_stringify = __commonJS({
|
|
|
2138
2138
|
sideChannel.set(object, step);
|
|
2139
2139
|
var valueSideChannel = getSideChannel();
|
|
2140
2140
|
valueSideChannel.set(sentinel, sideChannel);
|
|
2141
|
-
pushToArray(
|
|
2141
|
+
pushToArray(values2, stringify2(
|
|
2142
2142
|
value,
|
|
2143
2143
|
keyPrefix,
|
|
2144
2144
|
generateArrayPrefix,
|
|
@@ -2159,7 +2159,7 @@ var require_stringify = __commonJS({
|
|
|
2159
2159
|
valueSideChannel
|
|
2160
2160
|
));
|
|
2161
2161
|
}
|
|
2162
|
-
return
|
|
2162
|
+
return values2;
|
|
2163
2163
|
};
|
|
2164
2164
|
var normalizeStringifyOptions = function normalizeStringifyOptions2(opts) {
|
|
2165
2165
|
if (!opts) {
|
|
@@ -3423,8 +3423,8 @@ async function get(id, flags) {
|
|
|
3423
3423
|
async function read(id, flags) {
|
|
3424
3424
|
const lang = flags.lang || DEFAULT_LANG;
|
|
3425
3425
|
const service = createService("wiki");
|
|
3426
|
-
const
|
|
3427
|
-
process.stdout.write(
|
|
3426
|
+
const content2 = await service.get(`pageContent/${lang}/${id}`, void 0, { parseResponse: false });
|
|
3427
|
+
process.stdout.write(content2 || "");
|
|
3428
3428
|
}
|
|
3429
3429
|
async function search(query, flags) {
|
|
3430
3430
|
const service = createService("wiki");
|
|
@@ -3452,10 +3452,10 @@ async function readContent(flags) {
|
|
|
3452
3452
|
async function save(id, flags) {
|
|
3453
3453
|
const lang = flags.lang || DEFAULT_LANG;
|
|
3454
3454
|
const service = createService("wiki");
|
|
3455
|
-
const
|
|
3455
|
+
const content2 = await readContent(flags);
|
|
3456
3456
|
const page = {
|
|
3457
3457
|
lang,
|
|
3458
|
-
content
|
|
3458
|
+
content: content2
|
|
3459
3459
|
};
|
|
3460
3460
|
if (id) page.id_wiki_page = parseInt(id);
|
|
3461
3461
|
if (flags.name) page.name = flags.name;
|
|
@@ -3506,8 +3506,517 @@ async function wiki(args2) {
|
|
|
3506
3506
|
}
|
|
3507
3507
|
}
|
|
3508
3508
|
|
|
3509
|
+
// src/commands/etl.ts
|
|
3510
|
+
var fs3 = __toESM(require("node:fs"));
|
|
3511
|
+
async function list3(flags) {
|
|
3512
|
+
const service = createService("etl");
|
|
3513
|
+
const threads = await service.get("threads");
|
|
3514
|
+
output(threads || [], flags);
|
|
3515
|
+
}
|
|
3516
|
+
async function get2(id, flags) {
|
|
3517
|
+
const service = createService("etl");
|
|
3518
|
+
const thread = await service.get(`threads/${id}`);
|
|
3519
|
+
output(thread, flags);
|
|
3520
|
+
}
|
|
3521
|
+
async function content(id, flags) {
|
|
3522
|
+
const service = createService("etl");
|
|
3523
|
+
const text = await service.get(`threadContent/${id}`, void 0, { parseResponse: false });
|
|
3524
|
+
process.stdout.write(text || "");
|
|
3525
|
+
}
|
|
3526
|
+
async function exec2(id, flags) {
|
|
3527
|
+
const service = createService("etl");
|
|
3528
|
+
let body = void 0;
|
|
3529
|
+
if (flags.file) {
|
|
3530
|
+
body = fs3.readFileSync(flags.file, "utf-8");
|
|
3531
|
+
} else if (flags.sql) {
|
|
3532
|
+
body = flags.sql;
|
|
3533
|
+
}
|
|
3534
|
+
const result = await service.post(`exec/${id}`, body, { parseResponse: false });
|
|
3535
|
+
process.stdout.write(result || "");
|
|
3536
|
+
}
|
|
3537
|
+
async function search2(query, flags) {
|
|
3538
|
+
const service = createService("etl");
|
|
3539
|
+
const results = await service.get("search", { q: query });
|
|
3540
|
+
output(results || [], flags);
|
|
3541
|
+
}
|
|
3542
|
+
async function etl(args2) {
|
|
3543
|
+
const { positional, flags } = parseArgs(args2);
|
|
3544
|
+
const [subcommand, ...rest] = positional;
|
|
3545
|
+
switch (subcommand) {
|
|
3546
|
+
case "list":
|
|
3547
|
+
return list3(flags);
|
|
3548
|
+
case "get":
|
|
3549
|
+
if (!rest[0]) {
|
|
3550
|
+
console.error("Usage: rp etl get <id>");
|
|
3551
|
+
process.exit(1);
|
|
3552
|
+
}
|
|
3553
|
+
return get2(rest[0], flags);
|
|
3554
|
+
case "content":
|
|
3555
|
+
if (!rest[0]) {
|
|
3556
|
+
console.error("Usage: rp etl content <id>");
|
|
3557
|
+
process.exit(1);
|
|
3558
|
+
}
|
|
3559
|
+
return content(rest[0], flags);
|
|
3560
|
+
case "exec":
|
|
3561
|
+
if (!rest[0]) {
|
|
3562
|
+
console.error('Usage: rp etl exec <id> [--sql "..."] [--file path]');
|
|
3563
|
+
process.exit(1);
|
|
3564
|
+
}
|
|
3565
|
+
return exec2(rest[0], flags);
|
|
3566
|
+
case "search":
|
|
3567
|
+
if (!rest[0]) {
|
|
3568
|
+
console.error("Usage: rp etl search <query>");
|
|
3569
|
+
process.exit(1);
|
|
3570
|
+
}
|
|
3571
|
+
return search2(rest[0], flags);
|
|
3572
|
+
default:
|
|
3573
|
+
console.log("Usage: rp etl <list|get|content|exec|search> [options]");
|
|
3574
|
+
break;
|
|
3575
|
+
}
|
|
3576
|
+
}
|
|
3577
|
+
|
|
3578
|
+
// src/commands/jobs.ts
|
|
3579
|
+
async function list4(flags) {
|
|
3580
|
+
const service = createService("jobs");
|
|
3581
|
+
const jobs2 = await service.get("userJobs");
|
|
3582
|
+
output(jobs2 || [], flags);
|
|
3583
|
+
}
|
|
3584
|
+
async function start(jobName, flags) {
|
|
3585
|
+
const service = createService("jobs");
|
|
3586
|
+
await service.get("start", { job_name: jobName });
|
|
3587
|
+
console.log(`Job "${jobName}" started.`);
|
|
3588
|
+
}
|
|
3589
|
+
async function stop(jobName, flags) {
|
|
3590
|
+
const service = createService("jobs");
|
|
3591
|
+
await service.get("stop", { job_name: jobName });
|
|
3592
|
+
console.log(`Job "${jobName}" stopped.`);
|
|
3593
|
+
}
|
|
3594
|
+
async function statusCmd(flags) {
|
|
3595
|
+
const service = createService("jobs");
|
|
3596
|
+
const statuses = await service.get("jobStatuses");
|
|
3597
|
+
output(statuses || [], flags);
|
|
3598
|
+
}
|
|
3599
|
+
async function jobs(args2) {
|
|
3600
|
+
const { positional, flags } = parseArgs(args2);
|
|
3601
|
+
const [subcommand, ...rest] = positional;
|
|
3602
|
+
switch (subcommand) {
|
|
3603
|
+
case "list":
|
|
3604
|
+
return list4(flags);
|
|
3605
|
+
case "start":
|
|
3606
|
+
if (!rest[0]) {
|
|
3607
|
+
console.error("Usage: rp jobs start <job_name>");
|
|
3608
|
+
process.exit(1);
|
|
3609
|
+
}
|
|
3610
|
+
return start(rest[0], flags);
|
|
3611
|
+
case "stop":
|
|
3612
|
+
if (!rest[0]) {
|
|
3613
|
+
console.error("Usage: rp jobs stop <job_name>");
|
|
3614
|
+
process.exit(1);
|
|
3615
|
+
}
|
|
3616
|
+
return stop(rest[0], flags);
|
|
3617
|
+
case "status":
|
|
3618
|
+
return statusCmd(flags);
|
|
3619
|
+
default:
|
|
3620
|
+
console.log("Usage: rp jobs <list|start|stop|status> [options]");
|
|
3621
|
+
break;
|
|
3622
|
+
}
|
|
3623
|
+
}
|
|
3624
|
+
|
|
3625
|
+
// src/commands/analytics.ts
|
|
3626
|
+
async function contexts(flags) {
|
|
3627
|
+
const service = createService("analytics");
|
|
3628
|
+
const ctxs = await service.get("namedContext");
|
|
3629
|
+
output(ctxs || [], flags);
|
|
3630
|
+
}
|
|
3631
|
+
async function getContext(id, flags) {
|
|
3632
|
+
const service = createService("analytics");
|
|
3633
|
+
const ctx = await service.get(`context/${id}`);
|
|
3634
|
+
output(ctx, flags);
|
|
3635
|
+
}
|
|
3636
|
+
async function report(id, flags) {
|
|
3637
|
+
const service = createService("analytics");
|
|
3638
|
+
const index = flags.index || "0";
|
|
3639
|
+
const result = await service.get(`report/${id}/${index}`, void 0, { parseResponse: false });
|
|
3640
|
+
process.stdout.write(result || "");
|
|
3641
|
+
}
|
|
3642
|
+
async function dimensions(flags) {
|
|
3643
|
+
const module2 = flags.module || flags.m;
|
|
3644
|
+
if (!module2) {
|
|
3645
|
+
console.error("Usage: rp analytics dimensions --module <module>");
|
|
3646
|
+
process.exit(1);
|
|
3647
|
+
}
|
|
3648
|
+
const service = createService("definition");
|
|
3649
|
+
const dims = await service.get(`visibleDimensions/${module2}`);
|
|
3650
|
+
output(dims || [], flags);
|
|
3651
|
+
}
|
|
3652
|
+
async function periods(flags) {
|
|
3653
|
+
const service = createService("analytics");
|
|
3654
|
+
const tree = await service.get("years");
|
|
3655
|
+
output(tree || [], flags);
|
|
3656
|
+
}
|
|
3657
|
+
async function analytics(args2) {
|
|
3658
|
+
const { positional, flags } = parseArgs(args2);
|
|
3659
|
+
const [subcommand, ...rest] = positional;
|
|
3660
|
+
switch (subcommand) {
|
|
3661
|
+
case "contexts":
|
|
3662
|
+
return contexts(flags);
|
|
3663
|
+
case "context":
|
|
3664
|
+
if (!rest[0]) {
|
|
3665
|
+
console.error("Usage: rp analytics context <id>");
|
|
3666
|
+
process.exit(1);
|
|
3667
|
+
}
|
|
3668
|
+
return getContext(rest[0], flags);
|
|
3669
|
+
case "report":
|
|
3670
|
+
if (!rest[0]) {
|
|
3671
|
+
console.error("Usage: rp analytics report <context_id> [--index N]");
|
|
3672
|
+
process.exit(1);
|
|
3673
|
+
}
|
|
3674
|
+
return report(rest[0], flags);
|
|
3675
|
+
case "dimensions":
|
|
3676
|
+
return dimensions(flags);
|
|
3677
|
+
case "years":
|
|
3678
|
+
return periods(flags);
|
|
3679
|
+
default:
|
|
3680
|
+
console.log("Usage: rp analytics <contexts|context|report|dimensions|years> [options]");
|
|
3681
|
+
break;
|
|
3682
|
+
}
|
|
3683
|
+
}
|
|
3684
|
+
|
|
3685
|
+
// src/commands/users.ts
|
|
3686
|
+
async function list5(flags) {
|
|
3687
|
+
const service = createService("users");
|
|
3688
|
+
const users2 = await service.get("allUsers");
|
|
3689
|
+
output(users2 || [], flags);
|
|
3690
|
+
}
|
|
3691
|
+
async function get3(user, flags) {
|
|
3692
|
+
const service = createService("users");
|
|
3693
|
+
const result = await service.get(user);
|
|
3694
|
+
output(result, flags);
|
|
3695
|
+
}
|
|
3696
|
+
async function rights(flags) {
|
|
3697
|
+
const service = createService("users");
|
|
3698
|
+
const result = await service.get("userRights");
|
|
3699
|
+
output(result || [], flags);
|
|
3700
|
+
}
|
|
3701
|
+
async function roles(flags) {
|
|
3702
|
+
const service = createService("users");
|
|
3703
|
+
const result = await service.get("accessRoles");
|
|
3704
|
+
output(result || [], flags);
|
|
3705
|
+
}
|
|
3706
|
+
async function users(args2) {
|
|
3707
|
+
const { positional, flags } = parseArgs(args2);
|
|
3708
|
+
const [subcommand, ...rest] = positional;
|
|
3709
|
+
switch (subcommand) {
|
|
3710
|
+
case "list":
|
|
3711
|
+
return list5(flags);
|
|
3712
|
+
case "get":
|
|
3713
|
+
return get3(rest[0] || "me", flags);
|
|
3714
|
+
case "me":
|
|
3715
|
+
return get3("me", flags);
|
|
3716
|
+
case "rights":
|
|
3717
|
+
return rights(flags);
|
|
3718
|
+
case "roles":
|
|
3719
|
+
return roles(flags);
|
|
3720
|
+
default:
|
|
3721
|
+
console.log("Usage: rp users <list|get|me|rights|roles> [options]");
|
|
3722
|
+
break;
|
|
3723
|
+
}
|
|
3724
|
+
}
|
|
3725
|
+
|
|
3726
|
+
// src/commands/def.ts
|
|
3727
|
+
async function statements(flags) {
|
|
3728
|
+
const service = createService("definition");
|
|
3729
|
+
const result = await service.get("finStatements");
|
|
3730
|
+
output(result || [], flags);
|
|
3731
|
+
}
|
|
3732
|
+
async function statement(id, flags) {
|
|
3733
|
+
const service = createService("definition");
|
|
3734
|
+
const result = await service.get(`finStatement/${id}`);
|
|
3735
|
+
output(result, flags);
|
|
3736
|
+
}
|
|
3737
|
+
async function dimensions2(flags) {
|
|
3738
|
+
const module2 = flags.module || flags.m;
|
|
3739
|
+
if (!module2) {
|
|
3740
|
+
console.error("Usage: rp def dimensions --module <module>");
|
|
3741
|
+
process.exit(1);
|
|
3742
|
+
}
|
|
3743
|
+
const service = createService("definition");
|
|
3744
|
+
const result = await service.get(`dimensions/${module2}`);
|
|
3745
|
+
output(result || [], flags);
|
|
3746
|
+
}
|
|
3747
|
+
async function modules(flags) {
|
|
3748
|
+
const service = createService("definition");
|
|
3749
|
+
const result = await service.get("modules");
|
|
3750
|
+
output(result || [], flags);
|
|
3751
|
+
}
|
|
3752
|
+
async function scenarios(flags) {
|
|
3753
|
+
const service = createService("definition");
|
|
3754
|
+
const result = await service.get("scenarios");
|
|
3755
|
+
output(result || [], flags);
|
|
3756
|
+
}
|
|
3757
|
+
async function fiscalYears(flags) {
|
|
3758
|
+
const service = createService("definition");
|
|
3759
|
+
const result = await service.get("fiscalYears");
|
|
3760
|
+
output(result || [], flags);
|
|
3761
|
+
}
|
|
3762
|
+
async function def(args2) {
|
|
3763
|
+
const { positional, flags } = parseArgs(args2);
|
|
3764
|
+
const [subcommand, ...rest] = positional;
|
|
3765
|
+
switch (subcommand) {
|
|
3766
|
+
case "statements":
|
|
3767
|
+
return statements(flags);
|
|
3768
|
+
case "statement":
|
|
3769
|
+
if (!rest[0]) {
|
|
3770
|
+
console.error("Usage: rp def statement <id>");
|
|
3771
|
+
process.exit(1);
|
|
3772
|
+
}
|
|
3773
|
+
return statement(rest[0], flags);
|
|
3774
|
+
case "dimensions":
|
|
3775
|
+
return dimensions2(flags);
|
|
3776
|
+
case "modules":
|
|
3777
|
+
return modules(flags);
|
|
3778
|
+
case "scenarios":
|
|
3779
|
+
return scenarios(flags);
|
|
3780
|
+
case "fiscal-years":
|
|
3781
|
+
return fiscalYears(flags);
|
|
3782
|
+
default:
|
|
3783
|
+
console.log("Usage: rp def <statements|statement|dimensions|modules|scenarios|fiscal-years> [options]");
|
|
3784
|
+
break;
|
|
3785
|
+
}
|
|
3786
|
+
}
|
|
3787
|
+
|
|
3788
|
+
// src/commands/mdm.ts
|
|
3789
|
+
async function tables(flags) {
|
|
3790
|
+
const service = createService("mdm");
|
|
3791
|
+
const result = await service.get("tableDefinitions");
|
|
3792
|
+
output(result || [], flags);
|
|
3793
|
+
}
|
|
3794
|
+
async function table(id, flags) {
|
|
3795
|
+
const service = createService("mdm");
|
|
3796
|
+
const result = await service.get(`tableDefinition/${id}`);
|
|
3797
|
+
output(result, flags);
|
|
3798
|
+
}
|
|
3799
|
+
async function columns(id, flags) {
|
|
3800
|
+
const service = createService("mdm");
|
|
3801
|
+
const result = await service.get(`columnDefinitions/${id}`);
|
|
3802
|
+
output(result || [], flags);
|
|
3803
|
+
}
|
|
3804
|
+
async function values(id, flags) {
|
|
3805
|
+
const service = createService("mdm");
|
|
3806
|
+
const result = await service.get(`values/${id}`);
|
|
3807
|
+
output(result || [], flags);
|
|
3808
|
+
}
|
|
3809
|
+
async function exportCsv(id, flags) {
|
|
3810
|
+
const service = createService("mdm");
|
|
3811
|
+
const type = flags.type || "mdm";
|
|
3812
|
+
const result = await service.get(`export/${id}/${type}`, void 0, { parseResponse: false });
|
|
3813
|
+
process.stdout.write(result || "");
|
|
3814
|
+
}
|
|
3815
|
+
async function mdm(args2) {
|
|
3816
|
+
const { positional, flags } = parseArgs(args2);
|
|
3817
|
+
const [subcommand, ...rest] = positional;
|
|
3818
|
+
switch (subcommand) {
|
|
3819
|
+
case "tables":
|
|
3820
|
+
return tables(flags);
|
|
3821
|
+
case "table":
|
|
3822
|
+
if (!rest[0]) {
|
|
3823
|
+
console.error("Usage: rp mdm table <id>");
|
|
3824
|
+
process.exit(1);
|
|
3825
|
+
}
|
|
3826
|
+
return table(rest[0], flags);
|
|
3827
|
+
case "columns":
|
|
3828
|
+
if (!rest[0]) {
|
|
3829
|
+
console.error("Usage: rp mdm columns <id>");
|
|
3830
|
+
process.exit(1);
|
|
3831
|
+
}
|
|
3832
|
+
return columns(rest[0], flags);
|
|
3833
|
+
case "values":
|
|
3834
|
+
if (!rest[0]) {
|
|
3835
|
+
console.error("Usage: rp mdm values <id>");
|
|
3836
|
+
process.exit(1);
|
|
3837
|
+
}
|
|
3838
|
+
return values(rest[0], flags);
|
|
3839
|
+
case "export":
|
|
3840
|
+
if (!rest[0]) {
|
|
3841
|
+
console.error("Usage: rp mdm export <id> [--type mdm|sql]");
|
|
3842
|
+
process.exit(1);
|
|
3843
|
+
}
|
|
3844
|
+
return exportCsv(rest[0], flags);
|
|
3845
|
+
default:
|
|
3846
|
+
console.log("Usage: rp mdm <tables|table|columns|values|export> [options]");
|
|
3847
|
+
break;
|
|
3848
|
+
}
|
|
3849
|
+
}
|
|
3850
|
+
|
|
3851
|
+
// src/commands/helpdesk.ts
|
|
3852
|
+
async function list6(flags) {
|
|
3853
|
+
const service = createService("helpdesk");
|
|
3854
|
+
const tickets = await service.get("tickets");
|
|
3855
|
+
output(tickets || [], flags);
|
|
3856
|
+
}
|
|
3857
|
+
async function get4(id, flags) {
|
|
3858
|
+
const service = createService("helpdesk");
|
|
3859
|
+
const ticket = await service.get(`ticket/${id}`);
|
|
3860
|
+
output(ticket, flags);
|
|
3861
|
+
}
|
|
3862
|
+
async function messages(id, flags) {
|
|
3863
|
+
const service = createService("helpdesk");
|
|
3864
|
+
const msgs = await service.get(`messages/${id}`);
|
|
3865
|
+
output(msgs || [], flags);
|
|
3866
|
+
}
|
|
3867
|
+
async function create(flags) {
|
|
3868
|
+
const subject = flags.subject;
|
|
3869
|
+
const text = flags.text;
|
|
3870
|
+
if (!subject) {
|
|
3871
|
+
console.error('Usage: rp helpdesk create --subject "..." [--text "..."] [--priority N]');
|
|
3872
|
+
process.exit(1);
|
|
3873
|
+
}
|
|
3874
|
+
const service = createService("helpdesk");
|
|
3875
|
+
const ticket = { subject };
|
|
3876
|
+
if (flags.priority) ticket.priority = parseInt(flags.priority);
|
|
3877
|
+
const result = await service.post("ticket", ticket);
|
|
3878
|
+
if (text && result?.id_request) {
|
|
3879
|
+
await service.post("message", { id_request: result.id_request, text });
|
|
3880
|
+
}
|
|
3881
|
+
output(result, flags);
|
|
3882
|
+
}
|
|
3883
|
+
async function helpdesk(args2) {
|
|
3884
|
+
const { positional, flags } = parseArgs(args2);
|
|
3885
|
+
const [subcommand, ...rest] = positional;
|
|
3886
|
+
switch (subcommand) {
|
|
3887
|
+
case "list":
|
|
3888
|
+
return list6(flags);
|
|
3889
|
+
case "get":
|
|
3890
|
+
if (!rest[0]) {
|
|
3891
|
+
console.error("Usage: rp helpdesk get <id>");
|
|
3892
|
+
process.exit(1);
|
|
3893
|
+
}
|
|
3894
|
+
return get4(rest[0], flags);
|
|
3895
|
+
case "messages":
|
|
3896
|
+
if (!rest[0]) {
|
|
3897
|
+
console.error("Usage: rp helpdesk messages <ticket_id>");
|
|
3898
|
+
process.exit(1);
|
|
3899
|
+
}
|
|
3900
|
+
return messages(rest[0], flags);
|
|
3901
|
+
case "create":
|
|
3902
|
+
return create(flags);
|
|
3903
|
+
default:
|
|
3904
|
+
console.log("Usage: rp helpdesk <list|get|messages|create> [options]");
|
|
3905
|
+
break;
|
|
3906
|
+
}
|
|
3907
|
+
}
|
|
3908
|
+
|
|
3509
3909
|
// USAGE.md
|
|
3510
|
-
var USAGE_default =
|
|
3910
|
+
var USAGE_default = `Reporting.bi CLI
|
|
3911
|
+
|
|
3912
|
+
Usage: rp <command> [options]
|
|
3913
|
+
|
|
3914
|
+
Commands:
|
|
3915
|
+
login [domain] [--accounting <id>] Login to a Reporting.bi instance (opens browser)
|
|
3916
|
+
logout [domain] Logout and revoke tokens (default: active connection)
|
|
3917
|
+
use <domain> [--accounting <id>] Switch active connection and/or set accounting
|
|
3918
|
+
status Show all connections and active status
|
|
3919
|
+
|
|
3920
|
+
Accounting:
|
|
3921
|
+
accounting list List available accountings
|
|
3922
|
+
|
|
3923
|
+
ETL:
|
|
3924
|
+
etl list List all threads
|
|
3925
|
+
etl get <id> Get thread metadata
|
|
3926
|
+
etl content <id> Get thread SQL content (plain text)
|
|
3927
|
+
etl exec <id> [--sql "..."|--file f] Execute thread (optionally with custom SQL)
|
|
3928
|
+
etl search <query> Search threads
|
|
3929
|
+
|
|
3930
|
+
Jobs:
|
|
3931
|
+
jobs list List available jobs
|
|
3932
|
+
jobs start <job_name> Start a job
|
|
3933
|
+
jobs stop <job_name> Stop a running job
|
|
3934
|
+
jobs status Show status of all jobs
|
|
3935
|
+
|
|
3936
|
+
Analytics:
|
|
3937
|
+
analytics contexts List saved report contexts
|
|
3938
|
+
analytics context <id> Get report context details
|
|
3939
|
+
analytics report <context_id> Execute report and get results
|
|
3940
|
+
analytics dimensions --module <m> List dimensions for a module
|
|
3941
|
+
analytics years List available years
|
|
3942
|
+
|
|
3943
|
+
Users:
|
|
3944
|
+
users list List all users
|
|
3945
|
+
users get [username] Get user profile (default: me)
|
|
3946
|
+
users me Get current user profile
|
|
3947
|
+
users rights Show current user's access rights
|
|
3948
|
+
users roles List access roles
|
|
3949
|
+
|
|
3950
|
+
Definition:
|
|
3951
|
+
def statements List all statements
|
|
3952
|
+
def statement <id> Get statement definition
|
|
3953
|
+
def dimensions --module <m> List dimensions for a module
|
|
3954
|
+
def modules List available modules
|
|
3955
|
+
def scenarios List scenarios
|
|
3956
|
+
def fiscal-years List fiscal years
|
|
3957
|
+
|
|
3958
|
+
MDM:
|
|
3959
|
+
mdm tables List MDM table definitions
|
|
3960
|
+
mdm table <id> Get table definition
|
|
3961
|
+
mdm columns <id> Get column definitions for a table
|
|
3962
|
+
mdm values <id> Get table values
|
|
3963
|
+
mdm export <id> [--type mdm|sql] Export table as CSV
|
|
3964
|
+
|
|
3965
|
+
Helpdesk:
|
|
3966
|
+
helpdesk list List all tickets
|
|
3967
|
+
helpdesk get <id> Get ticket details
|
|
3968
|
+
helpdesk messages <ticket_id> Get ticket messages
|
|
3969
|
+
helpdesk create --subject "..." [--text "..."] [--priority N] Create a ticket
|
|
3970
|
+
|
|
3971
|
+
Wiki:
|
|
3972
|
+
wiki list List all pages
|
|
3973
|
+
wiki get <id> [--lang cs] Get page metadata
|
|
3974
|
+
wiki read <id> [--lang cs] Get page content (plain text)
|
|
3975
|
+
wiki search <query> Search pages
|
|
3976
|
+
wiki save [id] [--lang cs] [--name n] Save/create a page (content from --file, --content, or stdin)
|
|
3977
|
+
wiki delete <id> [--lang cs] Delete a page
|
|
3978
|
+
|
|
3979
|
+
Global options:
|
|
3980
|
+
--json Output raw JSON instead of table format
|
|
3981
|
+
|
|
3982
|
+
Default domain: https://reporting.bi
|
|
3983
|
+
Default language: cs
|
|
3984
|
+
|
|
3985
|
+
Examples:
|
|
3986
|
+
rp login http://localhost:3011 --accounting 100000
|
|
3987
|
+
rp use https://reporting.bi --accounting 100000
|
|
3988
|
+
rp status
|
|
3989
|
+
|
|
3990
|
+
rp etl list
|
|
3991
|
+
rp etl exec 42
|
|
3992
|
+
rp etl content 42
|
|
3993
|
+
|
|
3994
|
+
rp jobs list
|
|
3995
|
+
rp jobs start "My Job"
|
|
3996
|
+
rp jobs status
|
|
3997
|
+
|
|
3998
|
+
rp analytics contexts
|
|
3999
|
+
rp analytics report 123
|
|
4000
|
+
|
|
4001
|
+
rp users me
|
|
4002
|
+
rp users list --json
|
|
4003
|
+
|
|
4004
|
+
rp def statements
|
|
4005
|
+
rp def modules
|
|
4006
|
+
|
|
4007
|
+
rp mdm tables
|
|
4008
|
+
rp mdm values 5
|
|
4009
|
+
rp mdm export 5 > data.csv
|
|
4010
|
+
|
|
4011
|
+
rp helpdesk list
|
|
4012
|
+
rp helpdesk create --subject "Bug report" --text "Details here"
|
|
4013
|
+
|
|
4014
|
+
rp wiki list
|
|
4015
|
+
rp wiki read 42
|
|
4016
|
+
rp wiki search "query"
|
|
4017
|
+
rp wiki save 42 --file ./page.md
|
|
4018
|
+
cat doc.md | rp wiki save 42
|
|
4019
|
+
`;
|
|
3511
4020
|
|
|
3512
4021
|
// src/index.ts
|
|
3513
4022
|
var [command, ...args] = process.argv.slice(2);
|
|
@@ -3527,6 +4036,27 @@ switch (command) {
|
|
|
3527
4036
|
case "accounting":
|
|
3528
4037
|
accounting(args);
|
|
3529
4038
|
break;
|
|
4039
|
+
case "etl":
|
|
4040
|
+
etl(args);
|
|
4041
|
+
break;
|
|
4042
|
+
case "jobs":
|
|
4043
|
+
jobs(args);
|
|
4044
|
+
break;
|
|
4045
|
+
case "analytics":
|
|
4046
|
+
analytics(args);
|
|
4047
|
+
break;
|
|
4048
|
+
case "users":
|
|
4049
|
+
users(args);
|
|
4050
|
+
break;
|
|
4051
|
+
case "def":
|
|
4052
|
+
def(args);
|
|
4053
|
+
break;
|
|
4054
|
+
case "mdm":
|
|
4055
|
+
mdm(args);
|
|
4056
|
+
break;
|
|
4057
|
+
case "helpdesk":
|
|
4058
|
+
helpdesk(args);
|
|
4059
|
+
break;
|
|
3530
4060
|
case "status":
|
|
3531
4061
|
status();
|
|
3532
4062
|
break;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reporting-bi/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"description": "Reporting.bi CLI — command-line interface for the Reporting.bi platform",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"build": "yarn node build.mjs",
|
|
15
15
|
"watch": "yarn build --watch",
|
|
16
16
|
"deploy-installers": "cp install.sh ../rp-static/install-cli.sh && cp install.ps1 ../rp-static/install-cli.ps1",
|
|
17
|
-
"release": "yarn node -e \"const p=require('./package.json');const v=p.version.split('.');v[2]++;p.version=v.join('.');require('fs').writeFileSync('package.json',JSON.stringify(p,null,'\\t')+'\\n')\" && yarn build && git add package.json && git commit -m \"rp-cli v$(yarn node -p \"require('./package.json').version\")\" && yarn npm publish --access public"
|
|
17
|
+
"release": "yarn node -e \"const p=require('./package.json');const v=p.version.split('.');v[2]++;p.version=v.join('.');require('fs').writeFileSync('package.json',JSON.stringify(p,null,'\\t')+'\\n')\" && yarn build && git add package.json && git commit -m \"rp-cli v$(yarn node -p \"require('./package.json').version\")\" && git push && yarn npm publish --access public"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {},
|
|
20
20
|
"devDependencies": {
|