vestberry-cli 0.1.0
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/LICENSE +21 -0
- package/README.md +186 -0
- package/dist/api/client.d.ts +8 -0
- package/dist/api/client.js +57 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/endpoints/auth.d.ts +6 -0
- package/dist/api/endpoints/auth.js +9 -0
- package/dist/api/endpoints/auth.js.map +1 -0
- package/dist/api/endpoints/companies.d.ts +8 -0
- package/dist/api/endpoints/companies.js +34 -0
- package/dist/api/endpoints/companies.js.map +1 -0
- package/dist/api/endpoints/funds.d.ts +10 -0
- package/dist/api/endpoints/funds.js +293 -0
- package/dist/api/endpoints/funds.js.map +1 -0
- package/dist/api/endpoints/meta.d.ts +4 -0
- package/dist/api/endpoints/meta.js +48 -0
- package/dist/api/endpoints/meta.js.map +1 -0
- package/dist/api/endpoints/metrics.d.ts +33 -0
- package/dist/api/endpoints/metrics.js +306 -0
- package/dist/api/endpoints/metrics.js.map +1 -0
- package/dist/api/endpoints/notes.d.ts +10 -0
- package/dist/api/endpoints/notes.js +63 -0
- package/dist/api/endpoints/notes.js.map +1 -0
- package/dist/api/endpoints/portco-dashboard.d.ts +6 -0
- package/dist/api/endpoints/portco-dashboard.js +123 -0
- package/dist/api/endpoints/portco-dashboard.js.map +1 -0
- package/dist/api/endpoints/raw.d.ts +3 -0
- package/dist/api/endpoints/raw.js +22 -0
- package/dist/api/endpoints/raw.js.map +1 -0
- package/dist/api/endpoints/reports.d.ts +5 -0
- package/dist/api/endpoints/reports.js +104 -0
- package/dist/api/endpoints/reports.js.map +1 -0
- package/dist/api/graphql.d.ts +7 -0
- package/dist/api/graphql.js +32 -0
- package/dist/api/graphql.js.map +1 -0
- package/dist/api/introspection.d.ts +2 -0
- package/dist/api/introspection.js +62 -0
- package/dist/api/introspection.js.map +1 -0
- package/dist/api/types.d.ts +32 -0
- package/dist/api/types.js +18 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +57 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +2 -0
- package/dist/commands/auth.js +27 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/captable-event.d.ts +2 -0
- package/dist/commands/captable-event.js +31 -0
- package/dist/commands/captable-event.js.map +1 -0
- package/dist/commands/common.d.ts +17 -0
- package/dist/commands/common.js +46 -0
- package/dist/commands/common.js.map +1 -0
- package/dist/commands/fund.d.ts +2 -0
- package/dist/commands/fund.js +87 -0
- package/dist/commands/fund.js.map +1 -0
- package/dist/commands/intent/index.d.ts +2 -0
- package/dist/commands/intent/index.js +286 -0
- package/dist/commands/intent/index.js.map +1 -0
- package/dist/commands/investment.d.ts +2 -0
- package/dist/commands/investment.js +51 -0
- package/dist/commands/investment.js.map +1 -0
- package/dist/commands/kpi.d.ts +2 -0
- package/dist/commands/kpi.js +113 -0
- package/dist/commands/kpi.js.map +1 -0
- package/dist/commands/meta.d.ts +2 -0
- package/dist/commands/meta.js +64 -0
- package/dist/commands/meta.js.map +1 -0
- package/dist/commands/note.d.ts +2 -0
- package/dist/commands/note.js +113 -0
- package/dist/commands/note.js.map +1 -0
- package/dist/commands/portco.d.ts +2 -0
- package/dist/commands/portco.js +26 -0
- package/dist/commands/portco.js.map +1 -0
- package/dist/commands/portfolio-company.d.ts +2 -0
- package/dist/commands/portfolio-company.js +48 -0
- package/dist/commands/portfolio-company.js.map +1 -0
- package/dist/commands/portfolio-summary.d.ts +18 -0
- package/dist/commands/portfolio-summary.js +334 -0
- package/dist/commands/portfolio-summary.js.map +1 -0
- package/dist/commands/raw.d.ts +2 -0
- package/dist/commands/raw.js +57 -0
- package/dist/commands/raw.js.map +1 -0
- package/dist/commands/round.d.ts +2 -0
- package/dist/commands/round.js +68 -0
- package/dist/commands/round.js.map +1 -0
- package/dist/commands/schema.d.ts +2 -0
- package/dist/commands/schema.js +27 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/stakeholder.d.ts +2 -0
- package/dist/commands/stakeholder.js +50 -0
- package/dist/commands/stakeholder.js.map +1 -0
- package/dist/formatters/csv.d.ts +1 -0
- package/dist/formatters/csv.js +16 -0
- package/dist/formatters/csv.js.map +1 -0
- package/dist/formatters/json.d.ts +1 -0
- package/dist/formatters/json.js +7 -0
- package/dist/formatters/json.js.map +1 -0
- package/dist/formatters/table.d.ts +1 -0
- package/dist/formatters/table.js +31 -0
- package/dist/formatters/table.js.map +1 -0
- package/dist/resolvers/company.d.ts +7 -0
- package/dist/resolvers/company.js +22 -0
- package/dist/resolvers/company.js.map +1 -0
- package/dist/resolvers/fund.d.ts +7 -0
- package/dist/resolvers/fund.js +22 -0
- package/dist/resolvers/fund.js.map +1 -0
- package/dist/resolvers/round.d.ts +8 -0
- package/dist/resolvers/round.js +25 -0
- package/dist/resolvers/round.js.map +1 -0
- package/dist/resolvers/search.d.ts +6 -0
- package/dist/resolvers/search.js +57 -0
- package/dist/resolvers/search.js.map +1 -0
- package/dist/resolvers/stakeholder.d.ts +7 -0
- package/dist/resolvers/stakeholder.js +22 -0
- package/dist/resolvers/stakeholder.js.map +1 -0
- package/dist/utils/cache.d.ts +7 -0
- package/dist/utils/cache.js +18 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/config.d.ts +16 -0
- package/dist/utils/config.js +25 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/errors.d.ts +12 -0
- package/dist/utils/errors.js +24 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/flatten.d.ts +3 -0
- package/dist/utils/flatten.js +77 -0
- package/dist/utils/flatten.js.map +1 -0
- package/dist/utils/json-export.d.ts +10 -0
- package/dist/utils/json-export.js +53 -0
- package/dist/utils/json-export.js.map +1 -0
- package/dist/utils/output.d.ts +4 -0
- package/dist/utils/output.js +63 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/pagination.d.ts +12 -0
- package/dist/utils/pagination.js +46 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/parse-json.d.ts +2 -0
- package/dist/utils/parse-json.js +34 -0
- package/dist/utils/parse-json.js.map +1 -0
- package/dist/utils/portfolio-overview.d.ts +25 -0
- package/dist/utils/portfolio-overview.js +115 -0
- package/dist/utils/portfolio-overview.js.map +1 -0
- package/dist/utils/run-log.d.ts +1 -0
- package/dist/utils/run-log.js +17 -0
- package/dist/utils/run-log.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerNoteCommand = registerNoteCommand;
|
|
4
|
+
const notes_1 = require("../api/endpoints/notes");
|
|
5
|
+
const pagination_1 = require("../utils/pagination");
|
|
6
|
+
const output_1 = require("../utils/output");
|
|
7
|
+
const common_1 = require("./common");
|
|
8
|
+
const parse_json_1 = require("../utils/parse-json");
|
|
9
|
+
const run_log_1 = require("../utils/run-log");
|
|
10
|
+
function registerNoteCommand(program) {
|
|
11
|
+
const cmd = program.command('note').description('Note commands');
|
|
12
|
+
cmd
|
|
13
|
+
.command('list')
|
|
14
|
+
.option('--company-id <id>', 'Portfolio company ID filter')
|
|
15
|
+
.option('--fund-id <id>', 'Fund ID filter')
|
|
16
|
+
.option('--all', 'Return all available rows', false)
|
|
17
|
+
.description('List notes')
|
|
18
|
+
.addHelpText('after', `
|
|
19
|
+
Examples:
|
|
20
|
+
$ vestberry note list
|
|
21
|
+
$ vestberry note list --company-id xyz789
|
|
22
|
+
$ vestberry note list --fund-id abc123 --format table`)
|
|
23
|
+
.action(async function action(options) {
|
|
24
|
+
try {
|
|
25
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
26
|
+
const rows = await (0, notes_1.listNotes)(client, {
|
|
27
|
+
...(options.companyId !== undefined ? { companyId: options.companyId } : {}),
|
|
28
|
+
...(options.fundId !== undefined ? { fundId: options.fundId } : {}),
|
|
29
|
+
}, config.verbose);
|
|
30
|
+
(0, output_1.printListEnvelope)((0, pagination_1.createListEnvelope)(rows), config);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
cmd
|
|
37
|
+
.command('create')
|
|
38
|
+
.requiredOption('--data <json|@file>', 'AddNoteInput JSON payload')
|
|
39
|
+
.option('--apply', 'Execute mutation (otherwise dry-run)', false)
|
|
40
|
+
.option('--dry-run', 'Force dry-run', true)
|
|
41
|
+
.description('Create note (dry-run by default)')
|
|
42
|
+
.addHelpText('after', `
|
|
43
|
+
Examples:
|
|
44
|
+
$ vestberry note create --data '{"content":"Meeting notes","portfolioCompany":{"id":"xyz789"}}'
|
|
45
|
+
$ vestberry note create --data @note-payload.json
|
|
46
|
+
$ vestberry note create --data @note.json --apply --no-dry-run`)
|
|
47
|
+
.action(async function action(options) {
|
|
48
|
+
try {
|
|
49
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
50
|
+
const payload = (await (0, parse_json_1.parseJsonInput)(options.data)) ?? {};
|
|
51
|
+
const shouldApply = Boolean(options.apply) && !Boolean(options.dryRun) && !config.dryRun;
|
|
52
|
+
if (!shouldApply) {
|
|
53
|
+
const log = await (0, run_log_1.writeRunLog)({ action: 'note.create', dryRun: true, payload });
|
|
54
|
+
(0, output_1.printData)({ dryRun: true, action: 'note.create', payload, log }, config);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const created = await (0, notes_1.createNote)(client, payload, config.verbose);
|
|
58
|
+
const companyId = payload.portfolioCompany?.id;
|
|
59
|
+
const fundId = payload.portfolioFund?.id;
|
|
60
|
+
const verify = await (0, notes_1.listNotes)(client, {
|
|
61
|
+
...(companyId !== undefined ? { companyId } : {}),
|
|
62
|
+
...(fundId !== undefined ? { fundId } : {}),
|
|
63
|
+
}, config.verbose);
|
|
64
|
+
const log = await (0, run_log_1.writeRunLog)({
|
|
65
|
+
action: 'note.create',
|
|
66
|
+
dryRun: false,
|
|
67
|
+
payload,
|
|
68
|
+
created,
|
|
69
|
+
verificationCount: verify.length,
|
|
70
|
+
});
|
|
71
|
+
(0, output_1.printData)({ created, verificationCount: verify.length, log }, config);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
cmd
|
|
78
|
+
.command('update <id>')
|
|
79
|
+
.requiredOption('--data <json|@file>', 'EditNoteInput partial JSON payload')
|
|
80
|
+
.option('--apply', 'Execute mutation (otherwise dry-run)', false)
|
|
81
|
+
.option('--dry-run', 'Force dry-run', true)
|
|
82
|
+
.description('Update note (dry-run by default)')
|
|
83
|
+
.addHelpText('after', `
|
|
84
|
+
Examples:
|
|
85
|
+
$ vestberry note update note123 --data '{"content":"Updated notes"}'
|
|
86
|
+
$ vestberry note update note123 --data @update.json
|
|
87
|
+
$ vestberry note update note123 --data @update.json --apply --no-dry-run`)
|
|
88
|
+
.action(async function action(id, options) {
|
|
89
|
+
try {
|
|
90
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
91
|
+
const payload = (await (0, parse_json_1.parseJsonInput)(options.data)) ?? {};
|
|
92
|
+
const shouldApply = Boolean(options.apply) && !Boolean(options.dryRun) && !config.dryRun;
|
|
93
|
+
if (!shouldApply) {
|
|
94
|
+
const log = await (0, run_log_1.writeRunLog)({ action: 'note.update', dryRun: true, id, payload });
|
|
95
|
+
(0, output_1.printData)({ dryRun: true, action: 'note.update', id, payload, log }, config);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const updated = await (0, notes_1.updateNote)(client, id, payload, config.verbose);
|
|
99
|
+
const log = await (0, run_log_1.writeRunLog)({
|
|
100
|
+
action: 'note.update',
|
|
101
|
+
dryRun: false,
|
|
102
|
+
id,
|
|
103
|
+
payload,
|
|
104
|
+
updated,
|
|
105
|
+
});
|
|
106
|
+
(0, output_1.printData)({ updated, log }, config);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=note.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"note.js","sourceRoot":"","sources":["../../src/commands/note.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerPortcoCommand = registerPortcoCommand;
|
|
4
|
+
const portco_dashboard_1 = require("../api/endpoints/portco-dashboard");
|
|
5
|
+
const output_1 = require("../utils/output");
|
|
6
|
+
const common_1 = require("./common");
|
|
7
|
+
function registerPortcoCommand(program) {
|
|
8
|
+
const portco = program.command('portco').description('Portfolio company ledger commands');
|
|
9
|
+
portco
|
|
10
|
+
.command('dashboard <fundId> <portcoId>')
|
|
11
|
+
.description('Get ledger dashboard details for a portfolio company in fund context')
|
|
12
|
+
.addHelpText('after', `
|
|
13
|
+
Examples:
|
|
14
|
+
$ vestberry portco dashboard <fund-id> <portco-id>`)
|
|
15
|
+
.action(async function action(fundId, portcoId) {
|
|
16
|
+
try {
|
|
17
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
18
|
+
const row = await (0, portco_dashboard_1.getPortfolioCompanyLedgerDashboardDetails)(client, { fundId, portfolioCompanyId: portcoId }, config.verbose);
|
|
19
|
+
(0, output_1.printData)(row, config);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=portco.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portco.js","sourceRoot":"","sources":["../../src/commands/portco.ts"],"names":[],"mappings":";;AAKA,sDAyBC;AA7BD,wEAA8F;AAC9F,4CAA4C;AAC5C,qCAA6D;AAE7D,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;IAE1F,MAAM;SACH,OAAO,CAAC,+BAA+B,CAAC;SACxC,WAAW,CAAC,sEAAsE,CAAC;SACnF,WAAW,CACV,OAAO,EACP;;qDAE+C,CAChD;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAc,EAAE,QAAgB;QAC5D,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,MAAM,IAAA,4DAAyC,EACzD,MAAM,EACN,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EACxC,MAAM,CAAC,OAAO,CACf,CAAC;YACF,IAAA,kBAAS,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,uBAAc,EAAC,KAAK,EAAE,OAAO,CAAE,IAAI,CAAC,eAAe,EAA4B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerPortfolioCompanyCommand = registerPortfolioCompanyCommand;
|
|
4
|
+
const companies_1 = require("../api/endpoints/companies");
|
|
5
|
+
const company_1 = require("../resolvers/company");
|
|
6
|
+
const pagination_1 = require("../utils/pagination");
|
|
7
|
+
const output_1 = require("../utils/output");
|
|
8
|
+
const common_1 = require("./common");
|
|
9
|
+
function registerPortfolioCompanyCommand(program) {
|
|
10
|
+
const cmd = program.command('portfolio-company').description('Portfolio company commands');
|
|
11
|
+
cmd
|
|
12
|
+
.command('get <companyId>')
|
|
13
|
+
.requiredOption('--fund-id <id>', 'Fund ID')
|
|
14
|
+
.description('Get portfolio company by ID in fund context')
|
|
15
|
+
.addHelpText('after', `
|
|
16
|
+
Examples:
|
|
17
|
+
$ vestberry portfolio-company get xyz789 --fund-id abc123`)
|
|
18
|
+
.action(async function action(companyId, options) {
|
|
19
|
+
try {
|
|
20
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
21
|
+
const row = await (0, companies_1.getPortfolioCompany)(client, options.fundId, companyId, config.verbose);
|
|
22
|
+
(0, output_1.printData)(row, config);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
cmd
|
|
29
|
+
.command('search')
|
|
30
|
+
.requiredOption('--fund-id <id>', 'Fund ID')
|
|
31
|
+
.requiredOption('--query <text>', 'Search text')
|
|
32
|
+
.description('Search portfolio companies within a fund')
|
|
33
|
+
.addHelpText('after', `
|
|
34
|
+
Examples:
|
|
35
|
+
$ vestberry portfolio-company search --fund-id abc123 --query "Tech Corp"
|
|
36
|
+
$ vestberry portfolio-company search --fund-id abc123 --query "AI" --format table`)
|
|
37
|
+
.action(async function action(options) {
|
|
38
|
+
try {
|
|
39
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
40
|
+
const rows = await (0, company_1.searchCompanies)(client, options.fundId, options.query, config.verbose);
|
|
41
|
+
(0, output_1.printListEnvelope)((0, pagination_1.createListEnvelope)(rows), config);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=portfolio-company.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio-company.js","sourceRoot":"","sources":["../../src/commands/portfolio-company.ts"],"names":[],"mappings":";;AAOA,0EA4CC;AAlDD,0DAAiE;AACjE,kDAAuD;AACvD,oDAAyD;AACzD,4CAA+D;AAC/D,qCAA6D;AAE7D,SAAgB,+BAA+B,CAAC,OAAgB;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAE3F,GAAG;SACA,OAAO,CAAC,iBAAiB,CAAC;SAC1B,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC;SAC3C,WAAW,CAAC,6CAA6C,CAAC;SAC1D,WAAW,CACV,OAAO,EACP;;4DAEsD,CACvD;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,SAAiB,EAAE,OAA2B;QAC1E,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,MAAM,IAAA,+BAAmB,EAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACzF,IAAA,kBAAS,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,uBAAc,EAAC,KAAK,EAAE,OAAO,CAAE,IAAI,CAAC,eAAe,EAA4B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC;SAC3C,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC;SAC/C,WAAW,CAAC,0CAA0C,CAAC;SACvD,WAAW,CACV,OAAO,EACP;;;oFAG8E,CAC/E;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA0C;QACtE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAe,EAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1F,IAAA,0BAAiB,EAAC,IAAA,+BAAkB,EAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,uBAAc,EAAC,KAAK,EAAE,OAAO,CAAE,IAAI,CAAC,eAAe,EAA4B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { ListEnvelope } from '../api/types';
|
|
3
|
+
interface PortfolioSummarySelectSpec {
|
|
4
|
+
companyFields: Set<string>;
|
|
5
|
+
summaryFields: Set<string>;
|
|
6
|
+
includeCompanies: boolean;
|
|
7
|
+
includeSummary: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function hasPortfolioSummaryId(row: Record<string, unknown>): boolean;
|
|
10
|
+
export declare function hasPortfolioCompanyId(row: Record<string, unknown>): boolean;
|
|
11
|
+
export declare function isPortfolioSummaryTotalRow(row: Record<string, unknown>): boolean;
|
|
12
|
+
export declare function flattenPortfolioSummaryCompanyRow(row: Record<string, unknown>): Record<string, unknown>;
|
|
13
|
+
export declare function flattenPortfolioSummaryAggregateRow(row: Record<string, unknown>, fundId: string): Record<string, unknown>;
|
|
14
|
+
export declare function buildPortfolioSummaryJsonPayload(envelope: ListEnvelope<Record<string, unknown>>, fundId: string, totalRow?: Record<string, unknown>): Record<string, unknown>;
|
|
15
|
+
export declare function parsePortfolioSummarySelect(select: string): PortfolioSummarySelectSpec;
|
|
16
|
+
export declare function applyPortfolioSummarySelect(payload: Record<string, unknown>, selectSpec: PortfolioSummarySelectSpec): Record<string, unknown>;
|
|
17
|
+
export declare function registerFundSummarySubcommand(fund: Command): void;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasPortfolioSummaryId = hasPortfolioSummaryId;
|
|
4
|
+
exports.hasPortfolioCompanyId = hasPortfolioCompanyId;
|
|
5
|
+
exports.isPortfolioSummaryTotalRow = isPortfolioSummaryTotalRow;
|
|
6
|
+
exports.flattenPortfolioSummaryCompanyRow = flattenPortfolioSummaryCompanyRow;
|
|
7
|
+
exports.flattenPortfolioSummaryAggregateRow = flattenPortfolioSummaryAggregateRow;
|
|
8
|
+
exports.buildPortfolioSummaryJsonPayload = buildPortfolioSummaryJsonPayload;
|
|
9
|
+
exports.parsePortfolioSummarySelect = parsePortfolioSummarySelect;
|
|
10
|
+
exports.applyPortfolioSummarySelect = applyPortfolioSummarySelect;
|
|
11
|
+
exports.registerFundSummarySubcommand = registerFundSummarySubcommand;
|
|
12
|
+
const metrics_1 = require("../api/endpoints/metrics");
|
|
13
|
+
const pagination_1 = require("../utils/pagination");
|
|
14
|
+
const output_1 = require("../utils/output");
|
|
15
|
+
const common_1 = require("./common");
|
|
16
|
+
const json_export_1 = require("../utils/json-export");
|
|
17
|
+
const DASHBOARD_BASE_FIELDS = [
|
|
18
|
+
'ownership',
|
|
19
|
+
'ownershipFD',
|
|
20
|
+
'investedEquity',
|
|
21
|
+
'investedDebt',
|
|
22
|
+
'investedFunds',
|
|
23
|
+
'totalOriginalCost',
|
|
24
|
+
'irr',
|
|
25
|
+
'multiple',
|
|
26
|
+
];
|
|
27
|
+
const DASHBOARD_FULL_FIELDS = [
|
|
28
|
+
'investmentInstrument',
|
|
29
|
+
'entryRound',
|
|
30
|
+
'exits',
|
|
31
|
+
'status',
|
|
32
|
+
'totalFofInvestment',
|
|
33
|
+
'latestInvestmentStage',
|
|
34
|
+
'totalFollowOnInvestment',
|
|
35
|
+
'totalInitialInvestment',
|
|
36
|
+
'currentCost',
|
|
37
|
+
'investedOther',
|
|
38
|
+
'proceedsTotal',
|
|
39
|
+
'proceeds',
|
|
40
|
+
'debtRepayment',
|
|
41
|
+
'cashRealized',
|
|
42
|
+
'cashIncome',
|
|
43
|
+
'currentShareValue',
|
|
44
|
+
'companyValuation',
|
|
45
|
+
'firstCheckMoIC',
|
|
46
|
+
'totalReturn',
|
|
47
|
+
'outstandingDebt',
|
|
48
|
+
'totalCapitalGain',
|
|
49
|
+
'entryInvestmentStage',
|
|
50
|
+
'firstInvestmentEventDate',
|
|
51
|
+
'totalCommitment',
|
|
52
|
+
'fundedPortfolioFundCommitment',
|
|
53
|
+
'fundedPortfolioCompanyCommitment',
|
|
54
|
+
'unfundedPortfolioFundCommitment',
|
|
55
|
+
'unfundedPortfolioCompanyCommitment',
|
|
56
|
+
'latestFinancingRound',
|
|
57
|
+
'totalAmountRaised',
|
|
58
|
+
];
|
|
59
|
+
const PORTFOLIO_COMPANY_FLAT_FIELDS = [
|
|
60
|
+
'portfolioCompanyId',
|
|
61
|
+
'portfolioCompanyVatId',
|
|
62
|
+
'portfolioCompanyTaxId',
|
|
63
|
+
'portfolioCompanyFullLegalName',
|
|
64
|
+
'portfolioCompanyStage',
|
|
65
|
+
'portfolioCompanyDisplayName',
|
|
66
|
+
'portfolioCompanyDomicileCountry',
|
|
67
|
+
'portfolioCompanyOperatingCurrency',
|
|
68
|
+
'portfolioCompanyLogo',
|
|
69
|
+
];
|
|
70
|
+
const PORTFOLIO_SUMMARY_COMPANY_SELECTABLE_FIELDS = new Set([
|
|
71
|
+
'id',
|
|
72
|
+
'investmentName',
|
|
73
|
+
...PORTFOLIO_COMPANY_FLAT_FIELDS,
|
|
74
|
+
...DASHBOARD_BASE_FIELDS,
|
|
75
|
+
...DASHBOARD_FULL_FIELDS,
|
|
76
|
+
'seatsAggregated',
|
|
77
|
+
'sectors',
|
|
78
|
+
]);
|
|
79
|
+
const PORTFOLIO_SUMMARY_SUMMARY_SELECTABLE_FIELDS = new Set(['id', 'investmentName', ...DASHBOARD_BASE_FIELDS, ...DASHBOARD_FULL_FIELDS].filter((field) => field !== 'ownership' && field !== 'ownershipFD' && field !== 'latestInvestmentRoundDate'));
|
|
80
|
+
function hasPortfolioSummaryId(row) {
|
|
81
|
+
return typeof row.id === 'string' && row.id.trim().length > 0;
|
|
82
|
+
}
|
|
83
|
+
function asRecord(value) {
|
|
84
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
function hasPortfolioCompanyId(row) {
|
|
90
|
+
const company = row.portfolioCompany;
|
|
91
|
+
if (!company || typeof company !== 'object' || Array.isArray(company)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
const id = company.id;
|
|
95
|
+
return typeof id === 'string' && id.trim().length > 0;
|
|
96
|
+
}
|
|
97
|
+
function isPortfolioSummaryTotalRow(row) {
|
|
98
|
+
if (hasPortfolioSummaryId(row)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return String(row.investmentName ?? '')
|
|
102
|
+
.trim()
|
|
103
|
+
.toUpperCase() === 'TOTAL';
|
|
104
|
+
}
|
|
105
|
+
function prefixedCompanyFields(company) {
|
|
106
|
+
if (!company) {
|
|
107
|
+
return {};
|
|
108
|
+
}
|
|
109
|
+
const output = {};
|
|
110
|
+
for (const [key, value] of Object.entries(company)) {
|
|
111
|
+
if (key.length === 0) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (key === 'companyId') {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
output[`portfolioCompany${key.charAt(0).toUpperCase()}${key.slice(1)}`] = value;
|
|
118
|
+
}
|
|
119
|
+
return output;
|
|
120
|
+
}
|
|
121
|
+
function flattenPortfolioSummaryCompanyRow(row) {
|
|
122
|
+
const portfolioCompany = asRecord(row.portfolioCompany);
|
|
123
|
+
const dashboardDetails = asRecord(row.dashboardDetails);
|
|
124
|
+
const rest = { ...row };
|
|
125
|
+
delete rest.portfolioCompany;
|
|
126
|
+
delete rest.portfolioFund;
|
|
127
|
+
delete rest.dashboardDetails;
|
|
128
|
+
return {
|
|
129
|
+
...rest,
|
|
130
|
+
...prefixedCompanyFields(portfolioCompany),
|
|
131
|
+
...(dashboardDetails ?? {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function flattenPortfolioSummaryAggregateRow(row, fundId) {
|
|
135
|
+
const dashboardDetails = asRecord(row.dashboardDetails) ?? {};
|
|
136
|
+
const { investmentName } = row;
|
|
137
|
+
const summary = {
|
|
138
|
+
id: fundId,
|
|
139
|
+
investmentName: investmentName ?? 'TOTAL',
|
|
140
|
+
};
|
|
141
|
+
for (const [key, value] of Object.entries(dashboardDetails)) {
|
|
142
|
+
if (key === 'ownership' || key === 'ownershipFD' || key === 'latestInvestmentRoundDate') {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
summary[key] = value;
|
|
146
|
+
}
|
|
147
|
+
return summary;
|
|
148
|
+
}
|
|
149
|
+
function maybeSummary(row, fundId) {
|
|
150
|
+
if (!row) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...flattenPortfolioSummaryAggregateRow(row, fundId),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function buildPortfolioSummaryJsonPayload(envelope, fundId, totalRow) {
|
|
158
|
+
const payload = {
|
|
159
|
+
pagination: envelope.pagination,
|
|
160
|
+
portfolioCompanies: envelope.data.map(flattenPortfolioSummaryCompanyRow),
|
|
161
|
+
};
|
|
162
|
+
const summary = maybeSummary(totalRow, fundId);
|
|
163
|
+
if (summary) {
|
|
164
|
+
payload.summary = summary;
|
|
165
|
+
}
|
|
166
|
+
return payload;
|
|
167
|
+
}
|
|
168
|
+
function pickFields(source, selectedFields) {
|
|
169
|
+
const projected = {};
|
|
170
|
+
for (const field of selectedFields) {
|
|
171
|
+
if (field in source) {
|
|
172
|
+
projected[field] = source[field];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return projected;
|
|
176
|
+
}
|
|
177
|
+
function parseSelectToken(token) {
|
|
178
|
+
if (token.startsWith('portfolioCompanies.')) {
|
|
179
|
+
return { scope: 'company', field: token.slice('portfolioCompanies.'.length) };
|
|
180
|
+
}
|
|
181
|
+
if (token.startsWith('summary.')) {
|
|
182
|
+
return { scope: 'summary', field: token.slice('summary.'.length) };
|
|
183
|
+
}
|
|
184
|
+
return { scope: 'any', field: token };
|
|
185
|
+
}
|
|
186
|
+
function parsePortfolioSummarySelect(select) {
|
|
187
|
+
const tokens = select
|
|
188
|
+
.split(',')
|
|
189
|
+
.map((token) => token.trim())
|
|
190
|
+
.filter((token) => token.length > 0);
|
|
191
|
+
if (tokens.length === 0) {
|
|
192
|
+
throw new Error('Invalid --select value. Provide a comma-separated list of fields, e.g. "id,investmentName,irr".');
|
|
193
|
+
}
|
|
194
|
+
const companyFields = new Set();
|
|
195
|
+
const summaryFields = new Set();
|
|
196
|
+
const unknownFields = [];
|
|
197
|
+
for (const token of tokens) {
|
|
198
|
+
const { scope, field } = parseSelectToken(token);
|
|
199
|
+
if (field.length === 0) {
|
|
200
|
+
unknownFields.push(token);
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
if (scope === 'company') {
|
|
204
|
+
if (!PORTFOLIO_SUMMARY_COMPANY_SELECTABLE_FIELDS.has(field)) {
|
|
205
|
+
unknownFields.push(token);
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
companyFields.add(field);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (scope === 'summary') {
|
|
212
|
+
if (!PORTFOLIO_SUMMARY_SUMMARY_SELECTABLE_FIELDS.has(field)) {
|
|
213
|
+
unknownFields.push(token);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
summaryFields.add(field);
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const inCompany = PORTFOLIO_SUMMARY_COMPANY_SELECTABLE_FIELDS.has(field);
|
|
220
|
+
const inSummary = PORTFOLIO_SUMMARY_SUMMARY_SELECTABLE_FIELDS.has(field);
|
|
221
|
+
if (!inCompany && !inSummary) {
|
|
222
|
+
unknownFields.push(token);
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (inCompany) {
|
|
226
|
+
companyFields.add(field);
|
|
227
|
+
}
|
|
228
|
+
if (inSummary) {
|
|
229
|
+
summaryFields.add(field);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (unknownFields.length > 0) {
|
|
233
|
+
throw new Error(`Unknown --select field(s): ${unknownFields.join(', ')}`);
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
companyFields,
|
|
237
|
+
summaryFields,
|
|
238
|
+
includeCompanies: companyFields.size > 0,
|
|
239
|
+
includeSummary: summaryFields.size > 0,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function applyPortfolioSummarySelect(payload, selectSpec) {
|
|
243
|
+
const pagination = asRecord(payload.pagination) ?? {};
|
|
244
|
+
const companiesRaw = Array.isArray(payload.portfolioCompanies)
|
|
245
|
+
? payload.portfolioCompanies.filter((row) => Boolean(row) && typeof row === 'object' && !Array.isArray(row))
|
|
246
|
+
: [];
|
|
247
|
+
const summaryRaw = asRecord(payload.summary);
|
|
248
|
+
const portfolioCompanies = selectSpec.includeCompanies
|
|
249
|
+
? companiesRaw
|
|
250
|
+
.map((row) => pickFields(row, selectSpec.companyFields))
|
|
251
|
+
.filter((row) => Object.keys(row).length > 0)
|
|
252
|
+
: [];
|
|
253
|
+
const projected = {
|
|
254
|
+
pagination: {
|
|
255
|
+
...pagination,
|
|
256
|
+
count: portfolioCompanies.length,
|
|
257
|
+
},
|
|
258
|
+
portfolioCompanies,
|
|
259
|
+
};
|
|
260
|
+
if (selectSpec.includeSummary && summaryRaw) {
|
|
261
|
+
projected.summary = pickFields(summaryRaw, selectSpec.summaryFields);
|
|
262
|
+
}
|
|
263
|
+
return projected;
|
|
264
|
+
}
|
|
265
|
+
function registerFundSummarySubcommand(fund) {
|
|
266
|
+
fund
|
|
267
|
+
.command('get-summary <fundId>')
|
|
268
|
+
.description('Get fund summary and metrics')
|
|
269
|
+
.option('--full', 'Include extended sectors and seat aggregation details', false)
|
|
270
|
+
.option('--select <fields>', 'Comma-separated field projection. Use optional prefixes: portfolioCompanies.<field>, summary.<field>')
|
|
271
|
+
.option('--export-json [path]', 'Export portfolio summary payload to JSON file')
|
|
272
|
+
.addHelpText('after', `
|
|
273
|
+
Examples:
|
|
274
|
+
$ vestberry fund get-summary abc123
|
|
275
|
+
$ vestberry fund get-summary abc123 --full
|
|
276
|
+
$ vestberry fund get-summary abc123 --select id,investmentName,irr
|
|
277
|
+
$ vestberry fund get-summary abc123 --select portfolioCompanies.id,portfolioCompanies.irr,summary.irr
|
|
278
|
+
$ vestberry fund get-summary abc123 --export-json
|
|
279
|
+
$ vestberry fund get-summary abc123 --format table`)
|
|
280
|
+
.action(async function action(fundId, options) {
|
|
281
|
+
try {
|
|
282
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
283
|
+
const rows = await (0, metrics_1.listPortfolioSummary)(client, {
|
|
284
|
+
fundId,
|
|
285
|
+
detailed: true,
|
|
286
|
+
full: Boolean(options.full),
|
|
287
|
+
includeLatestInvestmentRoundDate: false,
|
|
288
|
+
}, config.verbose);
|
|
289
|
+
const normalizedRows = rows
|
|
290
|
+
.map((row) => ({ ...row }))
|
|
291
|
+
.filter((row) => !isPortfolioSummaryTotalRow(row));
|
|
292
|
+
const totalRow = rows
|
|
293
|
+
.map((row) => ({ ...row }))
|
|
294
|
+
.find(isPortfolioSummaryTotalRow);
|
|
295
|
+
const dataRows = normalizedRows.filter((row) => hasPortfolioSummaryId(row) && hasPortfolioCompanyId(row));
|
|
296
|
+
const envelope = (0, pagination_1.createListEnvelope)(dataRows);
|
|
297
|
+
const payload = buildPortfolioSummaryJsonPayload(envelope, fundId, totalRow);
|
|
298
|
+
const selectSpec = options.select
|
|
299
|
+
? parsePortfolioSummarySelect(options.select)
|
|
300
|
+
: undefined;
|
|
301
|
+
const projectedPayload = selectSpec
|
|
302
|
+
? applyPortfolioSummarySelect(payload, selectSpec)
|
|
303
|
+
: payload;
|
|
304
|
+
if (options.exportJson) {
|
|
305
|
+
const defaultPath = (0, json_export_1.buildDefaultJsonExportPath)({
|
|
306
|
+
type: 'fund-get-summary',
|
|
307
|
+
idLabel: 'fund-id',
|
|
308
|
+
id: fundId,
|
|
309
|
+
});
|
|
310
|
+
const requestedPath = typeof options.exportJson === 'string' ? options.exportJson : undefined;
|
|
311
|
+
const filePath = await (0, json_export_1.resolveJsonExportPath)(requestedPath, defaultPath);
|
|
312
|
+
await (0, json_export_1.writeJsonExportFile)(filePath, projectedPayload);
|
|
313
|
+
process.stdout.write(`Saved fund summary JSON to ${filePath}\n`);
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (config.format === 'json') {
|
|
317
|
+
(0, output_1.printData)(projectedPayload, config);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (selectSpec) {
|
|
321
|
+
const rows = Array.isArray(projectedPayload.portfolioCompanies)
|
|
322
|
+
? projectedPayload.portfolioCompanies
|
|
323
|
+
: [];
|
|
324
|
+
(0, output_1.printListEnvelope)((0, pagination_1.createListEnvelope)(rows), config);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
(0, output_1.printListEnvelope)(envelope, config);
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=portfolio-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio-summary.js","sourceRoot":"","sources":["../../src/commands/portfolio-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerRawCommand = registerRawCommand;
|
|
4
|
+
const raw_1 = require("../api/endpoints/raw");
|
|
5
|
+
const common_1 = require("./common");
|
|
6
|
+
const parse_json_1 = require("../utils/parse-json");
|
|
7
|
+
const output_1 = require("../utils/output");
|
|
8
|
+
function registerRawCommand(program) {
|
|
9
|
+
const raw = program.command('raw').description('Raw API commands');
|
|
10
|
+
raw
|
|
11
|
+
.command('gql')
|
|
12
|
+
.description('Execute raw GraphQL query')
|
|
13
|
+
.requiredOption('--query <gql|@file>', 'GraphQL query string or @file')
|
|
14
|
+
.option('--variables <json|@file>', 'Variables JSON or @file')
|
|
15
|
+
.option('--operation <name>', 'Operation name')
|
|
16
|
+
.addHelpText('after', `
|
|
17
|
+
Examples:
|
|
18
|
+
$ vestberry raw gql --query 'query { funds { id displayName } }'
|
|
19
|
+
$ vestberry raw gql --query @query.graphql
|
|
20
|
+
$ vestberry raw gql --query @query.graphql --variables '{"fundId":"abc123"}'
|
|
21
|
+
$ vestberry raw gql --query @introspect.graphql --operation IntrospectionQuery`)
|
|
22
|
+
.action(async function action(options) {
|
|
23
|
+
try {
|
|
24
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
25
|
+
const query = await (0, parse_json_1.parseTextInput)(options.query);
|
|
26
|
+
const variables = await (0, parse_json_1.parseJsonInput)(options.variables);
|
|
27
|
+
const data = await (0, raw_1.runRawGraphQL)(client, query, variables, options.operation, config.verbose);
|
|
28
|
+
(0, output_1.printData)(data, config);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
raw
|
|
35
|
+
.command('http <method> <path>')
|
|
36
|
+
.description('Execute raw HTTP request against API base URL')
|
|
37
|
+
.option('--data <json|@file>', 'Request body JSON')
|
|
38
|
+
.option('--query <json|@file>', 'Query params JSON')
|
|
39
|
+
.addHelpText('after', `
|
|
40
|
+
Examples:
|
|
41
|
+
$ vestberry raw http GET /api/health
|
|
42
|
+
$ vestberry raw http POST /graphql --data '{"query":"{ funds { id } }"}'
|
|
43
|
+
$ vestberry raw http GET /api/funds --query '{"limit":10}'`)
|
|
44
|
+
.action(async function action(method, path, options) {
|
|
45
|
+
try {
|
|
46
|
+
const { client, config } = (0, common_1.getCommandContext)(this);
|
|
47
|
+
const data = await (0, parse_json_1.parseJsonInput)(options.data);
|
|
48
|
+
const params = await (0, parse_json_1.parseJsonInput)(options.query);
|
|
49
|
+
const result = await (0, raw_1.runRawHttp)(client, method, path, data, params);
|
|
50
|
+
(0, output_1.printData)(result, config);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
(0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=raw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw.js","sourceRoot":"","sources":["../../src/commands/raw.ts"],"names":[],"mappings":";;AAMA,gDAoEC;AAzED,8CAAiE;AACjE,qCAA6D;AAC7D,oDAAqE;AACrE,4CAA4C;AAE5C,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEnE,GAAG;SACA,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,2BAA2B,CAAC;SACxC,cAAc,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SACtE,MAAM,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;SAC7D,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,CAAC;SAC9C,WAAW,CACV,OAAO,EACP;;;;;iFAK2E,CAC5E;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAI7B;QACC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,IAAA,2BAAc,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,MAAM,IAAA,2BAAc,EAA0B,OAAO,CAAC,SAAS,CAAC,CAAC;YACnF,MAAM,IAAI,GAAG,MAAM,IAAA,mBAAa,EAC9B,MAAM,EACN,KAAK,EACL,SAAS,EACT,OAAO,CAAC,SAAS,EACjB,MAAM,CAAC,OAAO,CACf,CAAC;YACF,IAAA,kBAAS,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,uBAAc,EAAC,KAAK,EAAE,OAAO,CAAE,IAAI,CAAC,eAAe,EAA4B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;SAClD,MAAM,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;SACnD,WAAW,CACV,OAAO,EACP;;;;6DAIuD,CACxD;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAC3B,MAAc,EACd,IAAY,EACZ,OAA0C;QAE1C,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,IAAA,2BAAc,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAc,EAA0B,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAU,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACpE,IAAA,kBAAS,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,uBAAc,EAAC,KAAK,EAAE,OAAO,CAAE,IAAI,CAAC,eAAe,EAA4B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|