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.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -0
  3. package/dist/api/client.d.ts +8 -0
  4. package/dist/api/client.js +57 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/api/endpoints/auth.d.ts +6 -0
  7. package/dist/api/endpoints/auth.js +9 -0
  8. package/dist/api/endpoints/auth.js.map +1 -0
  9. package/dist/api/endpoints/companies.d.ts +8 -0
  10. package/dist/api/endpoints/companies.js +34 -0
  11. package/dist/api/endpoints/companies.js.map +1 -0
  12. package/dist/api/endpoints/funds.d.ts +10 -0
  13. package/dist/api/endpoints/funds.js +293 -0
  14. package/dist/api/endpoints/funds.js.map +1 -0
  15. package/dist/api/endpoints/meta.d.ts +4 -0
  16. package/dist/api/endpoints/meta.js +48 -0
  17. package/dist/api/endpoints/meta.js.map +1 -0
  18. package/dist/api/endpoints/metrics.d.ts +33 -0
  19. package/dist/api/endpoints/metrics.js +306 -0
  20. package/dist/api/endpoints/metrics.js.map +1 -0
  21. package/dist/api/endpoints/notes.d.ts +10 -0
  22. package/dist/api/endpoints/notes.js +63 -0
  23. package/dist/api/endpoints/notes.js.map +1 -0
  24. package/dist/api/endpoints/portco-dashboard.d.ts +6 -0
  25. package/dist/api/endpoints/portco-dashboard.js +123 -0
  26. package/dist/api/endpoints/portco-dashboard.js.map +1 -0
  27. package/dist/api/endpoints/raw.d.ts +3 -0
  28. package/dist/api/endpoints/raw.js +22 -0
  29. package/dist/api/endpoints/raw.js.map +1 -0
  30. package/dist/api/endpoints/reports.d.ts +5 -0
  31. package/dist/api/endpoints/reports.js +104 -0
  32. package/dist/api/endpoints/reports.js.map +1 -0
  33. package/dist/api/graphql.d.ts +7 -0
  34. package/dist/api/graphql.js +32 -0
  35. package/dist/api/graphql.js.map +1 -0
  36. package/dist/api/introspection.d.ts +2 -0
  37. package/dist/api/introspection.js +62 -0
  38. package/dist/api/introspection.js.map +1 -0
  39. package/dist/api/types.d.ts +32 -0
  40. package/dist/api/types.js +18 -0
  41. package/dist/api/types.js.map +1 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.js +57 -0
  44. package/dist/cli.js.map +1 -0
  45. package/dist/commands/auth.d.ts +2 -0
  46. package/dist/commands/auth.js +27 -0
  47. package/dist/commands/auth.js.map +1 -0
  48. package/dist/commands/captable-event.d.ts +2 -0
  49. package/dist/commands/captable-event.js +31 -0
  50. package/dist/commands/captable-event.js.map +1 -0
  51. package/dist/commands/common.d.ts +17 -0
  52. package/dist/commands/common.js +46 -0
  53. package/dist/commands/common.js.map +1 -0
  54. package/dist/commands/fund.d.ts +2 -0
  55. package/dist/commands/fund.js +87 -0
  56. package/dist/commands/fund.js.map +1 -0
  57. package/dist/commands/intent/index.d.ts +2 -0
  58. package/dist/commands/intent/index.js +286 -0
  59. package/dist/commands/intent/index.js.map +1 -0
  60. package/dist/commands/investment.d.ts +2 -0
  61. package/dist/commands/investment.js +51 -0
  62. package/dist/commands/investment.js.map +1 -0
  63. package/dist/commands/kpi.d.ts +2 -0
  64. package/dist/commands/kpi.js +113 -0
  65. package/dist/commands/kpi.js.map +1 -0
  66. package/dist/commands/meta.d.ts +2 -0
  67. package/dist/commands/meta.js +64 -0
  68. package/dist/commands/meta.js.map +1 -0
  69. package/dist/commands/note.d.ts +2 -0
  70. package/dist/commands/note.js +113 -0
  71. package/dist/commands/note.js.map +1 -0
  72. package/dist/commands/portco.d.ts +2 -0
  73. package/dist/commands/portco.js +26 -0
  74. package/dist/commands/portco.js.map +1 -0
  75. package/dist/commands/portfolio-company.d.ts +2 -0
  76. package/dist/commands/portfolio-company.js +48 -0
  77. package/dist/commands/portfolio-company.js.map +1 -0
  78. package/dist/commands/portfolio-summary.d.ts +18 -0
  79. package/dist/commands/portfolio-summary.js +334 -0
  80. package/dist/commands/portfolio-summary.js.map +1 -0
  81. package/dist/commands/raw.d.ts +2 -0
  82. package/dist/commands/raw.js +57 -0
  83. package/dist/commands/raw.js.map +1 -0
  84. package/dist/commands/round.d.ts +2 -0
  85. package/dist/commands/round.js +68 -0
  86. package/dist/commands/round.js.map +1 -0
  87. package/dist/commands/schema.d.ts +2 -0
  88. package/dist/commands/schema.js +27 -0
  89. package/dist/commands/schema.js.map +1 -0
  90. package/dist/commands/stakeholder.d.ts +2 -0
  91. package/dist/commands/stakeholder.js +50 -0
  92. package/dist/commands/stakeholder.js.map +1 -0
  93. package/dist/formatters/csv.d.ts +1 -0
  94. package/dist/formatters/csv.js +16 -0
  95. package/dist/formatters/csv.js.map +1 -0
  96. package/dist/formatters/json.d.ts +1 -0
  97. package/dist/formatters/json.js +7 -0
  98. package/dist/formatters/json.js.map +1 -0
  99. package/dist/formatters/table.d.ts +1 -0
  100. package/dist/formatters/table.js +31 -0
  101. package/dist/formatters/table.js.map +1 -0
  102. package/dist/resolvers/company.d.ts +7 -0
  103. package/dist/resolvers/company.js +22 -0
  104. package/dist/resolvers/company.js.map +1 -0
  105. package/dist/resolvers/fund.d.ts +7 -0
  106. package/dist/resolvers/fund.js +22 -0
  107. package/dist/resolvers/fund.js.map +1 -0
  108. package/dist/resolvers/round.d.ts +8 -0
  109. package/dist/resolvers/round.js +25 -0
  110. package/dist/resolvers/round.js.map +1 -0
  111. package/dist/resolvers/search.d.ts +6 -0
  112. package/dist/resolvers/search.js +57 -0
  113. package/dist/resolvers/search.js.map +1 -0
  114. package/dist/resolvers/stakeholder.d.ts +7 -0
  115. package/dist/resolvers/stakeholder.js +22 -0
  116. package/dist/resolvers/stakeholder.js.map +1 -0
  117. package/dist/utils/cache.d.ts +7 -0
  118. package/dist/utils/cache.js +18 -0
  119. package/dist/utils/cache.js.map +1 -0
  120. package/dist/utils/config.d.ts +16 -0
  121. package/dist/utils/config.js +25 -0
  122. package/dist/utils/config.js.map +1 -0
  123. package/dist/utils/errors.d.ts +12 -0
  124. package/dist/utils/errors.js +24 -0
  125. package/dist/utils/errors.js.map +1 -0
  126. package/dist/utils/flatten.d.ts +3 -0
  127. package/dist/utils/flatten.js +77 -0
  128. package/dist/utils/flatten.js.map +1 -0
  129. package/dist/utils/json-export.d.ts +10 -0
  130. package/dist/utils/json-export.js +53 -0
  131. package/dist/utils/json-export.js.map +1 -0
  132. package/dist/utils/output.d.ts +4 -0
  133. package/dist/utils/output.js +63 -0
  134. package/dist/utils/output.js.map +1 -0
  135. package/dist/utils/pagination.d.ts +12 -0
  136. package/dist/utils/pagination.js +46 -0
  137. package/dist/utils/pagination.js.map +1 -0
  138. package/dist/utils/parse-json.d.ts +2 -0
  139. package/dist/utils/parse-json.js +34 -0
  140. package/dist/utils/parse-json.js.map +1 -0
  141. package/dist/utils/portfolio-overview.d.ts +25 -0
  142. package/dist/utils/portfolio-overview.js +115 -0
  143. package/dist/utils/portfolio-overview.js.map +1 -0
  144. package/dist/utils/run-log.d.ts +1 -0
  145. package/dist/utils/run-log.js +17 -0
  146. package/dist/utils/run-log.js.map +1 -0
  147. package/package.json +70 -0
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerRoundCommand(program: Command): void;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerRoundCommand = registerRoundCommand;
4
+ const reports_1 = require("../api/endpoints/reports");
5
+ const round_1 = require("../resolvers/round");
6
+ const pagination_1 = require("../utils/pagination");
7
+ const output_1 = require("../utils/output");
8
+ const common_1 = require("./common");
9
+ function registerRoundCommand(program) {
10
+ const cmd = program.command('round').description('Financing round commands');
11
+ cmd
12
+ .command('list')
13
+ .requiredOption('--company-id <id>', 'Portfolio company ID')
14
+ .option('--until <date>', 'Cut-off date YYYY-MM-DD')
15
+ .description('List financing rounds for a company')
16
+ .addHelpText('after', `
17
+ Examples:
18
+ $ vestberry round list --company-id xyz789
19
+ $ vestberry round list --company-id xyz789 --until 2024-12-31
20
+ $ vestberry round list --company-id xyz789 --format table`)
21
+ .action(async function action(options) {
22
+ try {
23
+ const { client, config } = (0, common_1.getCommandContext)(this);
24
+ const rows = await (0, reports_1.listRounds)(client, options.companyId, options.until, config.verbose);
25
+ (0, output_1.printListEnvelope)((0, pagination_1.createListEnvelope)(rows), config);
26
+ }
27
+ catch (error) {
28
+ (0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
29
+ }
30
+ });
31
+ cmd
32
+ .command('get <roundId>')
33
+ .description('Get financing round detail by ID')
34
+ .addHelpText('after', `
35
+ Examples:
36
+ $ vestberry round get round123`)
37
+ .action(async function action(roundId) {
38
+ try {
39
+ const { client, config } = (0, common_1.getCommandContext)(this);
40
+ const row = await (0, reports_1.getRoundDetail)(client, roundId, config.verbose);
41
+ (0, output_1.printData)(row, config);
42
+ }
43
+ catch (error) {
44
+ (0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
45
+ }
46
+ });
47
+ cmd
48
+ .command('search')
49
+ .requiredOption('--company-id <id>', 'Portfolio company ID')
50
+ .requiredOption('--query <text>', 'Search query')
51
+ .option('--until <date>', 'Cut-off date YYYY-MM-DD')
52
+ .description('Search financing rounds by name')
53
+ .addHelpText('after', `
54
+ Examples:
55
+ $ vestberry round search --company-id xyz789 --query "Series A"
56
+ $ vestberry round search --company-id xyz789 --query "Seed" --until 2024-12-31`)
57
+ .action(async function action(options) {
58
+ try {
59
+ const { client, config } = (0, common_1.getCommandContext)(this);
60
+ const rows = await (0, round_1.searchRounds)(client, options.companyId, options.query, options.until, config.verbose);
61
+ (0, output_1.printListEnvelope)((0, pagination_1.createListEnvelope)(rows), config);
62
+ }
63
+ catch (error) {
64
+ (0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
65
+ }
66
+ });
67
+ }
68
+ //# sourceMappingURL=round.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round.js","sourceRoot":"","sources":["../../src/commands/round.ts"],"names":[],"mappings":";;AAOA,oDAyEC;AA/ED,sDAAsE;AACtE,8CAAkD;AAClD,oDAAyD;AACzD,4CAA+D;AAC/D,qCAA6D;AAE7D,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAE7E,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,cAAc,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SAC3D,MAAM,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;SACnD,WAAW,CAAC,qCAAqC,CAAC;SAClD,WAAW,CACV,OAAO,EACP;;;;4DAIsD,CACvD;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA8C;QAC1E,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAU,EAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACxF,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;IAEL,GAAG;SACA,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,WAAW,CACV,OAAO,EACP;;iCAE2B,CAC5B;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAe;QAC3C,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,MAAM,IAAA,wBAAc,EAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAClE,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,mBAAmB,EAAE,sBAAsB,CAAC;SAC3D,cAAc,CAAC,gBAAgB,EAAE,cAAc,CAAC;SAChD,MAAM,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;SACnD,WAAW,CAAC,iCAAiC,CAAC;SAC9C,WAAW,CACV,OAAO,EACP;;;iFAG2E,CAC5E;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA6D;QACzF,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAY,EAC7B,MAAM,EACN,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,KAAK,EACb,MAAM,CAAC,OAAO,CACf,CAAC;YACF,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,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerSchemaCommand(program: Command): void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSchemaCommand = registerSchemaCommand;
4
+ const introspection_1 = require("../api/introspection");
5
+ const common_1 = require("./common");
6
+ const output_1 = require("../utils/output");
7
+ function registerSchemaCommand(program) {
8
+ const schema = program.command('schema').description('Schema discovery commands');
9
+ schema
10
+ .command('pull')
11
+ .description('Fetch GraphQL introspection schema and store in .cache')
12
+ .addHelpText('after', `
13
+ Examples:
14
+ $ vestberry schema pull
15
+ $ vestberry schema pull --verbose`)
16
+ .action(async function action() {
17
+ try {
18
+ const { client, config } = (0, common_1.getCommandContext)(this);
19
+ const file = await (0, introspection_1.pullSchema)(client, config.verbose);
20
+ (0, output_1.printData)({ ok: true, file }, config);
21
+ }
22
+ catch (error) {
23
+ (0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":";;AAKA,sDAsBC;AA1BD,wDAAkD;AAClD,qCAA6D;AAC7D,4CAA4C;AAE5C,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAElF,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wDAAwD,CAAC;SACrE,WAAW,CACV,OAAO,EACP;;;oCAG8B,CAC/B;SACA,MAAM,CAAC,KAAK,UAAU,MAAM;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAU,EAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACtD,IAAA,kBAAS,EAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,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,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerStakeholderCommand(program: Command): void;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerStakeholderCommand = registerStakeholderCommand;
4
+ const reports_1 = require("../api/endpoints/reports");
5
+ const stakeholder_1 = require("../resolvers/stakeholder");
6
+ const pagination_1 = require("../utils/pagination");
7
+ const output_1 = require("../utils/output");
8
+ const common_1 = require("./common");
9
+ function registerStakeholderCommand(program) {
10
+ const cmd = program.command('stakeholder').description('Stakeholder commands');
11
+ cmd
12
+ .command('list')
13
+ .requiredOption('--company-id <id>', 'Portfolio company ID')
14
+ .option('--all', 'Return all available rows', false)
15
+ .description('List stakeholders')
16
+ .addHelpText('after', `
17
+ Examples:
18
+ $ vestberry stakeholder list --company-id xyz789
19
+ $ vestberry stakeholder list --company-id xyz789 --format table`)
20
+ .action(async function action(options) {
21
+ try {
22
+ const { client, config } = (0, common_1.getCommandContext)(this);
23
+ const rows = await (0, reports_1.listStakeholders)(client, options.companyId, config.verbose);
24
+ (0, output_1.printListEnvelope)((0, pagination_1.createListEnvelope)(rows), config);
25
+ }
26
+ catch (error) {
27
+ (0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
28
+ }
29
+ });
30
+ cmd
31
+ .command('search')
32
+ .requiredOption('--company-id <id>', 'Portfolio company ID')
33
+ .requiredOption('--query <text>', 'Search query')
34
+ .description('Search stakeholders by name')
35
+ .addHelpText('after', `
36
+ Examples:
37
+ $ vestberry stakeholder search --company-id xyz789 --query "John"
38
+ $ vestberry stakeholder search --company-id xyz789 --query "Smith" --format table`)
39
+ .action(async function action(options) {
40
+ try {
41
+ const { client, config } = (0, common_1.getCommandContext)(this);
42
+ const rows = await (0, stakeholder_1.searchStakeholders)(client, options.companyId, options.query, config.verbose);
43
+ (0, output_1.printListEnvelope)((0, pagination_1.createListEnvelope)(rows), config);
44
+ }
45
+ catch (error) {
46
+ (0, common_1.handleCliError)(error, Boolean(this.optsWithGlobals().verbose));
47
+ }
48
+ });
49
+ }
50
+ //# sourceMappingURL=stakeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakeholder.js","sourceRoot":"","sources":["../../src/commands/stakeholder.ts"],"names":[],"mappings":";;AAOA,gEAmDC;AAzDD,sDAA4D;AAC5D,0DAA8D;AAC9D,oDAAyD;AACzD,4CAAoD;AACpD,qCAA6D;AAE7D,SAAgB,0BAA0B,CAAC,OAAgB;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAE/E,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,cAAc,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SAC3D,MAAM,CAAC,OAAO,EAAE,2BAA2B,EAAE,KAAK,CAAC;SACnD,WAAW,CAAC,mBAAmB,CAAC;SAChC,WAAW,CACV,OAAO,EACP;;;kEAG4D,CAC7D;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA6C;QACzE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,IAAA,0BAAgB,EAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/E,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;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SAC3D,cAAc,CAAC,gBAAgB,EAAE,cAAc,CAAC;SAChD,WAAW,CAAC,6BAA6B,CAAC;SAC1C,WAAW,CACV,OAAO,EACP;;;oFAG8E,CAC/E;SACA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA6C;QACzE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,IAAA,gCAAkB,EACnC,MAAM,EACN,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,KAAK,EACb,MAAM,CAAC,OAAO,CACf,CAAC;YACF,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 @@
1
+ export declare function formatCsv(rows: Array<Record<string, unknown>>): string;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatCsv = formatCsv;
4
+ const sync_1 = require("csv-stringify/sync");
5
+ function formatCsv(rows) {
6
+ if (rows.length === 0) {
7
+ return '';
8
+ }
9
+ return (0, sync_1.stringify)(rows, {
10
+ header: true,
11
+ cast: {
12
+ object: (value) => JSON.stringify(value),
13
+ },
14
+ });
15
+ }
16
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../src/formatters/csv.ts"],"names":[],"mappings":";;AAEA,8BAWC;AAbD,6CAA+C;AAE/C,SAAgB,SAAS,CAAC,IAAoC;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAA,gBAAS,EAAC,IAAI,EAAE;QACrB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE;YACJ,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACzC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function formatJson(value: unknown): string;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatJson = formatJson;
4
+ function formatJson(value) {
5
+ return JSON.stringify(value, null, 2);
6
+ }
7
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/formatters/json.ts"],"names":[],"mappings":";;AAAA,gCAEC;AAFD,SAAgB,UAAU,CAAC,KAAc;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function formatTable(rows: Array<Record<string, unknown>>): string;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.formatTable = formatTable;
7
+ const cli_table3_1 = __importDefault(require("cli-table3"));
8
+ function formatTable(rows) {
9
+ if (rows.length === 0) {
10
+ return 'No data.';
11
+ }
12
+ const headers = Object.keys(rows[0] ?? {});
13
+ const table = new cli_table3_1.default({ head: headers });
14
+ for (const row of rows) {
15
+ table.push(headers.map((key) => stringifyCell(row[key])));
16
+ }
17
+ return table.toString();
18
+ }
19
+ function stringifyCell(value) {
20
+ if (value === null || value === undefined) {
21
+ return '';
22
+ }
23
+ if (Array.isArray(value)) {
24
+ return value.join(', ');
25
+ }
26
+ if (typeof value === 'object') {
27
+ return JSON.stringify(value);
28
+ }
29
+ return String(value);
30
+ }
31
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/formatters/table.ts"],"names":[],"mappings":";;;;;AAEA,kCAaC;AAfD,4DAA+B;AAE/B,SAAgB,WAAW,CAAC,IAAoC;IAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAE3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export declare function searchCompanies(client: AxiosInstance, fundId: string, query: string, verbose?: boolean): Promise<Array<{
3
+ id: string;
4
+ displayName: string;
5
+ score: number;
6
+ }>>;
7
+ export declare function resolveCompanyId(client: AxiosInstance, fundId: string, query: string, selectFirst?: boolean, verbose?: boolean): Promise<string>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchCompanies = searchCompanies;
4
+ exports.resolveCompanyId = resolveCompanyId;
5
+ const companies_1 = require("../api/endpoints/companies");
6
+ const search_1 = require("./search");
7
+ async function searchCompanies(client, fundId, query, verbose = false) {
8
+ const companies = await (0, companies_1.listPortfolioCompanies)(client, fundId, verbose);
9
+ const ranked = (0, search_1.rankByQuery)(query, companies, (item) => item.displayName || '');
10
+ return ranked.map((entry) => ({
11
+ id: entry.item.id,
12
+ displayName: entry.item.displayName,
13
+ score: entry.score,
14
+ }));
15
+ }
16
+ async function resolveCompanyId(client, fundId, query, selectFirst = false, verbose = false) {
17
+ const companies = await (0, companies_1.listPortfolioCompanies)(client, fundId, verbose);
18
+ const ranked = (0, search_1.rankByQuery)(query, companies, (item) => item.displayName || '');
19
+ const selected = (0, search_1.ensureSingleMatch)(ranked, selectFirst);
20
+ return selected.id;
21
+ }
22
+ //# sourceMappingURL=company.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company.js","sourceRoot":"","sources":["../../src/resolvers/company.ts"],"names":[],"mappings":";;AAIA,0CAaC;AAED,4CAWC;AA7BD,0DAAoE;AACpE,qCAA0D;AAEnD,KAAK,UAAU,eAAe,CACnC,MAAqB,EACrB,MAAc,EACd,KAAa,EACb,OAAO,GAAG,KAAK;IAEf,MAAM,SAAS,GAAG,MAAM,IAAA,kCAAsB,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;QACjB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;QACnC,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,MAAqB,EACrB,MAAc,EACd,KAAa,EACb,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,KAAK;IAEf,MAAM,SAAS,GAAG,MAAM,IAAA,kCAAsB,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAA,0BAAiB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxD,OAAO,QAAQ,CAAC,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export declare function searchFunds(client: AxiosInstance, query: string, verbose?: boolean): Promise<Array<{
3
+ id: string;
4
+ displayName: string;
5
+ score: number;
6
+ }>>;
7
+ export declare function resolveFundId(client: AxiosInstance, query: string, selectFirst?: boolean, verbose?: boolean): Promise<string>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchFunds = searchFunds;
4
+ exports.resolveFundId = resolveFundId;
5
+ const funds_1 = require("../api/endpoints/funds");
6
+ const search_1 = require("./search");
7
+ async function searchFunds(client, query, verbose = false) {
8
+ const funds = await (0, funds_1.listFunds)(client, undefined, verbose);
9
+ const ranked = (0, search_1.rankByQuery)(query, funds, (item) => item.displayName || '');
10
+ return ranked.map((entry) => ({
11
+ id: entry.item.id,
12
+ displayName: entry.item.displayName,
13
+ score: entry.score,
14
+ }));
15
+ }
16
+ async function resolveFundId(client, query, selectFirst = false, verbose = false) {
17
+ const funds = await (0, funds_1.listFunds)(client, undefined, verbose);
18
+ const ranked = (0, search_1.rankByQuery)(query, funds, (item) => item.displayName || '');
19
+ const selected = (0, search_1.ensureSingleMatch)(ranked, selectFirst);
20
+ return selected.id;
21
+ }
22
+ //# sourceMappingURL=fund.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fund.js","sourceRoot":"","sources":["../../src/resolvers/fund.ts"],"names":[],"mappings":";;AAIA,kCAYC;AAED,sCAUC;AA3BD,kDAAmD;AACnD,qCAA0D;AAEnD,KAAK,UAAU,WAAW,CAC/B,MAAqB,EACrB,KAAa,EACb,OAAO,GAAG,KAAK;IAEf,MAAM,KAAK,GAAG,MAAM,IAAA,iBAAS,EAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;QACjB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;QACnC,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,MAAqB,EACrB,KAAa,EACb,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,KAAK;IAEf,MAAM,KAAK,GAAG,MAAM,IAAA,iBAAS,EAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,IAAA,0BAAiB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxD,OAAO,QAAQ,CAAC,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export declare function searchRounds(client: AxiosInstance, companyId: string, query: string, until?: string, verbose?: boolean): Promise<Array<{
3
+ id: string;
4
+ name: string;
5
+ eventDate?: string;
6
+ score: number;
7
+ }>>;
8
+ export declare function resolveRoundId(client: AxiosInstance, companyId: string, query: string, until?: string, selectFirst?: boolean, verbose?: boolean): Promise<string>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchRounds = searchRounds;
4
+ exports.resolveRoundId = resolveRoundId;
5
+ const reports_1 = require("../api/endpoints/reports");
6
+ const search_1 = require("./search");
7
+ async function searchRounds(client, companyId, query, until, verbose = false) {
8
+ const rounds = await (0, reports_1.listRounds)(client, companyId, until, verbose);
9
+ const ranked = (0, search_1.rankByQuery)(query, rounds, (item) => String(item.name ?? ''));
10
+ return ranked.map((entry) => ({
11
+ id: String(entry.item.id ?? ''),
12
+ name: String(entry.item.name ?? ''),
13
+ ...(entry.item.eventDate !== undefined
14
+ ? { eventDate: entry.item.eventDate }
15
+ : {}),
16
+ score: entry.score,
17
+ }));
18
+ }
19
+ async function resolveRoundId(client, companyId, query, until, selectFirst = false, verbose = false) {
20
+ const rounds = await (0, reports_1.listRounds)(client, companyId, until, verbose);
21
+ const ranked = (0, search_1.rankByQuery)(query, rounds, (item) => String(item.name ?? ''));
22
+ const selected = (0, search_1.ensureSingleMatch)(ranked, selectFirst);
23
+ return String(selected.id ?? '');
24
+ }
25
+ //# sourceMappingURL=round.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round.js","sourceRoot":"","sources":["../../src/resolvers/round.ts"],"names":[],"mappings":";;AAIA,oCAiBC;AAED,wCAYC;AAlCD,sDAAsD;AACtD,qCAA0D;AAEnD,KAAK,UAAU,YAAY,CAChC,MAAqB,EACrB,SAAiB,EACjB,KAAa,EACb,KAAc,EACd,OAAO,GAAG,KAAK;IAEf,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAU,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAC/B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,GAAG,CAAE,KAAK,CAAC,IAAI,CAAC,SAAgC,KAAK,SAAS;YAC5D,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAmB,EAAE;YAC/C,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,MAAqB,EACrB,SAAiB,EACjB,KAAa,EACb,KAAc,EACd,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,KAAK;IAEf,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAU,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,IAAA,0BAAiB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface RankedItem<T> {
2
+ item: T;
3
+ score: number;
4
+ }
5
+ export declare function rankByQuery<T>(query: string, items: T[], selector: (item: T) => string): Array<RankedItem<T>>;
6
+ export declare function ensureSingleMatch<T>(ranked: Array<RankedItem<T>>, selectFirst?: boolean): T;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rankByQuery = rankByQuery;
4
+ exports.ensureSingleMatch = ensureSingleMatch;
5
+ const errors_1 = require("../utils/errors");
6
+ function normalize(value) {
7
+ return value.toLowerCase().trim();
8
+ }
9
+ function rankByQuery(query, items, selector) {
10
+ const q = normalize(query);
11
+ const tokens = q.split(/\s+/).filter(Boolean);
12
+ const ranked = items
13
+ .map((item) => {
14
+ const source = normalize(selector(item));
15
+ if (!source) {
16
+ return { item, score: -1 };
17
+ }
18
+ if (source === q) {
19
+ return { item, score: 1000 };
20
+ }
21
+ if (source.startsWith(q)) {
22
+ return { item, score: 800 };
23
+ }
24
+ let score = 0;
25
+ if (source.includes(q)) {
26
+ score += 600;
27
+ }
28
+ for (const token of tokens) {
29
+ if (source.startsWith(token)) {
30
+ score += 100;
31
+ }
32
+ else if (source.includes(token)) {
33
+ score += 50;
34
+ }
35
+ }
36
+ return { item, score };
37
+ })
38
+ .filter((entry) => entry.score > 0)
39
+ .sort((a, b) => b.score - a.score);
40
+ return ranked;
41
+ }
42
+ function ensureSingleMatch(ranked, selectFirst = false) {
43
+ if (ranked.length === 0) {
44
+ throw new errors_1.CliError('NOT_FOUND', 'No matching entity found.');
45
+ }
46
+ if (ranked.length > 1 && !selectFirst) {
47
+ throw new errors_1.CliError('AMBIGUOUS_RESULT', 'Ambiguous query, multiple candidates found.', {
48
+ candidates: ranked.slice(0, 10),
49
+ });
50
+ }
51
+ const top = ranked[0];
52
+ if (!top) {
53
+ throw new errors_1.CliError('NOT_FOUND', 'No matching entity found.');
54
+ }
55
+ return top.item;
56
+ }
57
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/resolvers/search.ts"],"names":[],"mappings":";;AAWA,kCA0CC;AAED,8CAgBC;AAvED,4CAA2C;AAO3C,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,SAAgB,WAAW,CACzB,KAAa,EACb,KAAU,EACV,QAA6B;IAE7B,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,KAAK;SACjB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,KAAK,IAAI,GAAG,CAAC;QACf,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,KAAK,IAAI,GAAG,CAAC;YACf,CAAC;iBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,KAAK,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;SAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,iBAAiB,CAAI,MAA4B,EAAE,WAAW,GAAG,KAAK;IACpF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,iBAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,iBAAQ,CAAC,kBAAkB,EAAE,6CAA6C,EAAE;YACpF,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,iBAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export declare function searchStakeholders(client: AxiosInstance, companyId: string, query: string, verbose?: boolean): Promise<Array<{
3
+ id: string;
4
+ name: string;
5
+ score: number;
6
+ }>>;
7
+ export declare function resolveStakeholderId(client: AxiosInstance, companyId: string, query: string, selectFirst?: boolean, verbose?: boolean): Promise<string>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchStakeholders = searchStakeholders;
4
+ exports.resolveStakeholderId = resolveStakeholderId;
5
+ const reports_1 = require("../api/endpoints/reports");
6
+ const search_1 = require("./search");
7
+ async function searchStakeholders(client, companyId, query, verbose = false) {
8
+ const stakeholders = await (0, reports_1.listStakeholders)(client, companyId, verbose);
9
+ const ranked = (0, search_1.rankByQuery)(query, stakeholders, (item) => String(item.name ?? ''));
10
+ return ranked.map((entry) => ({
11
+ id: String(entry.item.id ?? ''),
12
+ name: String(entry.item.name ?? ''),
13
+ score: entry.score,
14
+ }));
15
+ }
16
+ async function resolveStakeholderId(client, companyId, query, selectFirst = false, verbose = false) {
17
+ const stakeholders = await (0, reports_1.listStakeholders)(client, companyId, verbose);
18
+ const ranked = (0, search_1.rankByQuery)(query, stakeholders, (item) => String(item.name ?? ''));
19
+ const selected = (0, search_1.ensureSingleMatch)(ranked, selectFirst);
20
+ return String(selected.id ?? '');
21
+ }
22
+ //# sourceMappingURL=stakeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakeholder.js","sourceRoot":"","sources":["../../src/resolvers/stakeholder.ts"],"names":[],"mappings":";;AAIA,gDAaC;AAED,oDAWC;AA7BD,sDAA4D;AAC5D,qCAA0D;AAEnD,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,SAAiB,EACjB,KAAa,EACb,OAAO,GAAG,KAAK;IAEf,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAC/B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,MAAqB,EACrB,SAAiB,EACjB,KAAa,EACb,WAAW,GAAG,KAAK,EACnB,OAAO,GAAG,KAAK;IAEf,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,IAAA,0BAAiB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare class InMemoryCache<T> {
2
+ private readonly map;
3
+ get(key: string): T | undefined;
4
+ set(key: string, value: T): void;
5
+ has(key: string): boolean;
6
+ }
7
+ export declare const resolverCache: InMemoryCache<unknown>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolverCache = exports.InMemoryCache = void 0;
4
+ class InMemoryCache {
5
+ map = new Map();
6
+ get(key) {
7
+ return this.map.get(key);
8
+ }
9
+ set(key, value) {
10
+ this.map.set(key, value);
11
+ }
12
+ has(key) {
13
+ return this.map.has(key);
14
+ }
15
+ }
16
+ exports.InMemoryCache = InMemoryCache;
17
+ exports.resolverCache = new InMemoryCache();
18
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IACP,GAAG,GAAG,IAAI,GAAG,EAAa,CAAC;IAE5C,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACF;AAdD,sCAcC;AAEY,QAAA,aAAa,GAAG,IAAI,aAAa,EAAW,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface GlobalOptions {
2
+ apiKey?: string;
3
+ format?: 'json' | 'table' | 'csv';
4
+ compact?: boolean;
5
+ verbose?: boolean;
6
+ dryRun?: boolean;
7
+ }
8
+ export interface RuntimeConfig {
9
+ apiKey: string;
10
+ baseUrl: string;
11
+ format: 'json' | 'table' | 'csv';
12
+ compact: boolean;
13
+ verbose: boolean;
14
+ dryRun: boolean;
15
+ }
16
+ export declare function resolveRuntimeConfig(options: GlobalOptions): RuntimeConfig;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveRuntimeConfig = resolveRuntimeConfig;
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ const errors_1 = require("./errors");
9
+ dotenv_1.default.config({ quiet: true });
10
+ function resolveRuntimeConfig(options) {
11
+ const apiKey = options.apiKey ?? process.env.VESTBERRY_API_KEY ?? process.env.VESTBERRY_API_TOKEN ?? '';
12
+ const baseUrl = process.env.VESTBERRY_API_BASE_URL || 'https://api.vestberry.com/graphql';
13
+ if (!apiKey) {
14
+ throw new errors_1.CliError('CONFIG_ERROR', 'Missing API key. Set VESTBERRY_API_KEY (or legacy VESTBERRY_API_TOKEN) or pass --api-key.');
15
+ }
16
+ return {
17
+ apiKey,
18
+ baseUrl,
19
+ format: options.format ?? 'json',
20
+ compact: options.compact ?? true,
21
+ verbose: options.verbose ?? false,
22
+ dryRun: options.dryRun ?? false,
23
+ };
24
+ }
25
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;AAsBA,oDAoBC;AA1CD,oDAA4B;AAC5B,qCAAoC;AAEpC,gBAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAmB/B,SAAgB,oBAAoB,CAAC,OAAsB;IACzD,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAC3F,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,mCAAmC,CAAC;IAE1F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAQ,CAChB,cAAc,EACd,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM;QACN,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;QACjC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type CliErrorCode = 'CONFIG_ERROR' | 'VALIDATION_ERROR' | 'GRAPHQL_ERROR' | 'HTTP_ERROR' | 'NETWORK_ERROR' | 'AMBIGUOUS_RESULT' | 'NOT_FOUND' | 'DRY_RUN' | 'DEPENDENCY_ERROR';
2
+ export declare class CliError extends Error {
3
+ readonly code: CliErrorCode;
4
+ readonly details?: unknown;
5
+ constructor(code: CliErrorCode, message: string, details?: unknown);
6
+ }
7
+ export interface MappedGraphQLError {
8
+ message: string;
9
+ path?: ReadonlyArray<string | number>;
10
+ extensions?: Record<string, unknown>;
11
+ }
12
+ export declare function toCliError(error: unknown): CliError;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliError = void 0;
4
+ exports.toCliError = toCliError;
5
+ class CliError extends Error {
6
+ code;
7
+ details;
8
+ constructor(code, message, details) {
9
+ super(message);
10
+ this.code = code;
11
+ this.details = details;
12
+ }
13
+ }
14
+ exports.CliError = CliError;
15
+ function toCliError(error) {
16
+ if (error instanceof CliError) {
17
+ return error;
18
+ }
19
+ if (error instanceof Error) {
20
+ return new CliError('HTTP_ERROR', error.message);
21
+ }
22
+ return new CliError('HTTP_ERROR', 'Unknown error', error);
23
+ }
24
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":";;;AA4BA,gCAUC;AA3BD,MAAa,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAe;IACnB,OAAO,CAAW;IAE3B,YAAY,IAAkB,EAAE,OAAe,EAAE,OAAiB;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AATD,4BASC;AAQD,SAAgB,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function compactObject(input: Record<string, unknown>): Record<string, unknown>;
2
+ export declare function flattenRow(input: Record<string, unknown>, prefix?: string): Record<string, unknown>;
3
+ export declare function compactRows(rows: Array<Record<string, unknown>>): Array<Record<string, unknown>>;