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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,186 @@
1
+ # vestberry-cli
2
+
3
+ Production-grade GraphQL CLI for Vestberry with two layers:
4
+
5
+ - Layer A: primitive read/write commands
6
+ - Layer B: intent/orchestration commands for agent workflows
7
+
8
+ ## Install from npm
9
+
10
+ Requirements:
11
+ - Node.js `>=18` (Node `20` recommended)
12
+
13
+ ```bash
14
+ npm install -g vestberry-cli
15
+ vestberry --help
16
+ ```
17
+
18
+ ## From source
19
+
20
+ ```bash
21
+ npm install
22
+ npm run build
23
+ npm link
24
+ vestberry --help
25
+ ```
26
+
27
+ ## Auth
28
+
29
+ Create `.env`:
30
+
31
+ ```env
32
+ VESTBERRY_API_KEY=...
33
+ VESTBERRY_API_BASE_URL=https://api.vestberry.com/graphql
34
+ ```
35
+
36
+
37
+ ## Global Flags
38
+
39
+ - `--api-key <key>`
40
+ - `--format json|table|csv` (default `json`)
41
+ - `--compact` / `--no-compact` (default compact)
42
+ - `--verbose`
43
+ - `--dry-run`
44
+
45
+ ## Command Layers
46
+
47
+ ### Layer A: Primitive Wrappers
48
+
49
+ Thin wrappers around single API operations. Use these when you want direct control over query inputs and raw response shapes.
50
+
51
+ - `auth test`
52
+ - `raw gql`, `raw http`
53
+ - `fund list|get|get-portco-list|search`
54
+ - `portfolio-company get|search`
55
+ - `fund get-summary`
56
+ - `portco dashboard`
57
+ - `investment list|search`
58
+ - `round list|get|search`
59
+ - `captable-event list`
60
+ - `stakeholder list|search`
61
+ - `kpi overview|definitions|reports|values`
62
+ - `note list|create|update`
63
+ - `meta countries|currencies|fx-rates`
64
+
65
+ Examples:
66
+
67
+ ```bash
68
+ vestberry auth test
69
+ vestberry schema pull
70
+ vestberry fund list
71
+ vestberry fund search --query "Sample Growth Fund"
72
+ vestberry fund get <fund-id>
73
+ vestberry fund get <fund-id> --full
74
+ vestberry fund get-portco-list <fund-id>
75
+ vestberry fund get-summary <fund-id>
76
+ vestberry fund get-summary <fund-id> --full
77
+ vestberry fund get-summary <fund-id> --select id,investmentName,irr,multiple
78
+ vestberry fund get-summary <fund-id> --select portfolioCompanies.id,portfolioCompanies.irr,summary.irr
79
+ vestberry fund get-summary <fund-id> --export-json
80
+ vestberry portfolio-company search --fund-id <fund-id> --query "Sample Co"
81
+ vestberry portco dashboard <fund-id> <portco-id>
82
+ vestberry kpi overview --fund-id <fund-id>
83
+ vestberry round list --company-id <company-id>
84
+ vestberry captable-event list --company-id <company-id>
85
+ ```
86
+
87
+ ### Layer B: Advanced Intent Commands
88
+
89
+ Composed workflows that orchestrate multiple primitives and return opinionated output for common tasks.
90
+
91
+ - `portfolio overview`
92
+ - `portfolio companies`
93
+ - `company dossier`
94
+ - `rounds last-quarter`
95
+ - `invested total`
96
+ - `ingest legal-docs`
97
+
98
+ Examples:
99
+
100
+ ```bash
101
+ vestberry portfolio overview --fund-id <fund-id> --cut-off-date 2025-12-31 --export-json
102
+ vestberry portfolio companies --fund-id <fund-id>
103
+ vestberry company dossier --company-id <company-id> --fund-id <fund-id> --full
104
+ vestberry rounds last-quarter --fund-id <fund-id>
105
+ vestberry invested total --company "Company" --fund "Fund"
106
+ ```
107
+
108
+ ## Output Formats
109
+
110
+ - `json`: default, list envelope includes pagination
111
+ - `table`: flattened rows
112
+ - `csv`: flattened rows
113
+
114
+ ## Compact Formatting
115
+
116
+ Compact mode strips non-essential metadata and simplifies nested fields.
117
+ Disable with `--no-compact`.
118
+
119
+ ## Portfolio Overview Export
120
+
121
+ Use `--export-json [path]` on `portfolio overview` to write the payload to disk instead of printing full JSON to terminal.
122
+
123
+ - `vestberry portfolio overview --fund-id <fund-id> --export-json`
124
+ - `vestberry portfolio overview --fund-id <fund-id> --cut-off-date 2025-12-31 --export-json`
125
+ - `vestberry portfolio overview --fund-id <fund-id> --export-json ./tmp/overview.json`
126
+
127
+ When no path is provided, files are saved in `output/` with naming:
128
+ `<timestamp>-portfolio-overview-fund-id-<fund-id>.json`
129
+
130
+ Export payload structure:
131
+ - `cutOffDate` (replaces `until`)
132
+ - `fund` (`id`, `name`)
133
+ - `performance` (`numberOfCashFlows`, `numberOfNAVs`, `balance`, `tvpi`, `dpi`, `rvpi`, `netIrr`)
134
+ - `portfolioCompanies` (flattened dashboard metrics preferring `fund`, then `gp`, then `local`; single latest `latestInvestmentRoundDate`)
135
+
136
+ For `fund get-summary`, JSON output/export uses:
137
+ - `portfolioCompanies` (instead of `data`)
138
+ - flattened company rows: `portfolioCompany.*` and `dashboardDetails.*` moved one level up
139
+ - company rows exclude redundant `portfolioCompanyCompanyId` and exclude `portfolioFund`
140
+ - flattened `summary`: `dashboardDetails.*` moved one level up
141
+ - `summary.id` is set to the queried fund id
142
+ - optional `--select <fields>` projection for prosumer/agent use:
143
+ - unscoped fields (e.g. `id,irr`) are applied where available
144
+ - scoped fields: `portfolioCompanies.<field>` and `summary.<field>`
145
+
146
+ Rows are filtered to non-empty `id` and non-empty `portfolioCompany.id`; aggregate `TOTAL` is exposed as top-level `summary` when present.
147
+
148
+ ## Write Safety
149
+
150
+ Mutations are dry-run by default.
151
+ For write commands, pass `--apply --no-dry-run` to execute.
152
+ Run logs are written to `.cache/runs/`.
153
+
154
+ ## Development
155
+
156
+ ```bash
157
+ npm run dev -- --help
158
+ npm run type-check
159
+ npm run lint
160
+ npm run test
161
+ npm run build
162
+ ```
163
+
164
+ ## Publishing (maintainers)
165
+
166
+ ```bash
167
+ npm run verify
168
+ npm pack --dry-run
169
+ npm publish
170
+ ```
171
+
172
+ Integration tests (live API):
173
+
174
+ ```bash
175
+ npm run test:integration
176
+ ```
177
+
178
+ ## Troubleshooting
179
+
180
+ - 401/403: verify API key and base URL
181
+ - GraphQL field errors: run `vestberry schema pull` and use `raw gql` for discovery
182
+ - Empty arrays can be valid (for sparse KPI/report datasets)
183
+
184
+ ## License
185
+
186
+ MIT
@@ -0,0 +1,8 @@
1
+ import { AxiosInstance, AxiosResponse } from 'axios';
2
+ export interface RetryOptions {
3
+ retries?: number;
4
+ minDelayMs?: number;
5
+ maxDelayMs?: number;
6
+ }
7
+ export declare function createApiClient(baseURL: string, apiKey: string): AxiosInstance;
8
+ export declare function requestWithRetry<T>(call: () => Promise<AxiosResponse<T>>, options?: RetryOptions): Promise<AxiosResponse<T>>;
@@ -0,0 +1,57 @@
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.createApiClient = createApiClient;
7
+ exports.requestWithRetry = requestWithRetry;
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const RETRY_CODES = new Set([429, 502, 503, 504]);
10
+ function createApiClient(baseURL, apiKey) {
11
+ const client = axios_1.default.create({
12
+ baseURL,
13
+ headers: {
14
+ 'Content-Type': 'application/json',
15
+ },
16
+ timeout: 30_000,
17
+ });
18
+ client.interceptors.request.use((config) => {
19
+ config.headers.Authorization = `Bearer ${apiKey}`;
20
+ return config;
21
+ });
22
+ return client;
23
+ }
24
+ function wait(ms) {
25
+ return new Promise((resolve) => {
26
+ setTimeout(resolve, ms);
27
+ });
28
+ }
29
+ function nextDelay(attempt, minDelay, maxDelay) {
30
+ const exp = minDelay * 2 ** attempt;
31
+ const jitter = Math.floor(Math.random() * 150);
32
+ return Math.min(exp + jitter, maxDelay);
33
+ }
34
+ async function requestWithRetry(call, options = {}) {
35
+ const retries = options.retries ?? 4;
36
+ const minDelay = options.minDelayMs ?? 300;
37
+ const maxDelay = options.maxDelayMs ?? 5_000;
38
+ let attempt = 0;
39
+ let lastError;
40
+ while (attempt <= retries) {
41
+ try {
42
+ return await call();
43
+ }
44
+ catch (error) {
45
+ const status = error?.response?.status;
46
+ if (status === undefined || !RETRY_CODES.has(status) || attempt === retries) {
47
+ throw error;
48
+ }
49
+ lastError = error;
50
+ const delay = nextDelay(attempt, minDelay, maxDelay);
51
+ await wait(delay);
52
+ attempt += 1;
53
+ }
54
+ }
55
+ throw lastError;
56
+ }
57
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":";;;;;AAUA,0CAeC;AAcD,4CA2BC;AAlED,kDAA4D;AAE5D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAQlD,SAAgB,eAAe,CAAC,OAAe,EAAE,MAAc;IAC7D,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;QAC1B,OAAO;QACP,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACzC,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,EAAU;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,QAAgB,EAAE,QAAgB;IACpE,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,IAAI,OAAO,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,IAAqC,EACrC,UAAwB,EAAE;IAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAE7C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAkB,CAAC;IAEvB,OAAO,OAAO,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,KAAK,EAAE,QAAQ,EAAE,MAA4B,CAAC;YAC7D,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC5E,MAAM,KAAK,CAAC;YACd,CAAC;YACD,SAAS,GAAG,KAAK,CAAC;YAClB,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ interface AuthTestResponse {
3
+ __typename: string;
4
+ }
5
+ export declare function authTest(client: AxiosInstance, verbose?: boolean): Promise<AuthTestResponse>;
6
+ export {};
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authTest = authTest;
4
+ const graphql_1 = require("../graphql");
5
+ async function authTest(client, verbose = false) {
6
+ const query = `query AuthTest { __typename }`;
7
+ return (0, graphql_1.executeGraphQL)(client, { query }, verbose);
8
+ }
9
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/api/endpoints/auth.ts"],"names":[],"mappings":";;AAOA,4BAGC;AATD,wCAA4C;AAMrC,KAAK,UAAU,QAAQ,CAAC,MAAqB,EAAE,OAAO,GAAG,KAAK;IACnE,MAAM,KAAK,GAAG,+BAA+B,CAAC;IAC9C,OAAO,IAAA,wBAAc,EAAmB,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export interface PortfolioCompany {
3
+ id: string;
4
+ displayName: string;
5
+ [key: string]: unknown;
6
+ }
7
+ export declare function listPortfolioCompanies(client: AxiosInstance, fundId: string, verbose?: boolean): Promise<PortfolioCompany[]>;
8
+ export declare function getPortfolioCompany(client: AxiosInstance, fundId: string, companyId: string, verbose?: boolean): Promise<PortfolioCompany>;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listPortfolioCompanies = listPortfolioCompanies;
4
+ exports.getPortfolioCompany = getPortfolioCompany;
5
+ const graphql_1 = require("../graphql");
6
+ async function listPortfolioCompanies(client, fundId, verbose = false) {
7
+ const query = `
8
+ query PortfolioCompanies($input: PortfolioCompaniesInput) {
9
+ portfolioCompanies(input: $input) {
10
+ id
11
+ displayName
12
+ }
13
+ }
14
+ `;
15
+ const data = await (0, graphql_1.executeGraphQL)(client, { query, variables: { input: { fund: { id: fundId } } } }, verbose);
16
+ return data.portfolioCompanies ?? [];
17
+ }
18
+ async function getPortfolioCompany(client, fundId, companyId, verbose = false) {
19
+ const query = `
20
+ query PortfolioCompany($input: GetPortfolioCompanyInput) {
21
+ portfolioCompany(input: $input) {
22
+ id
23
+ displayName
24
+ description
25
+ email
26
+ phone
27
+ web
28
+ }
29
+ }
30
+ `;
31
+ const data = await (0, graphql_1.executeGraphQL)(client, { query, variables: { input: { fund: { id: fundId }, id: companyId } } }, verbose);
32
+ return data.portfolioCompany;
33
+ }
34
+ //# sourceMappingURL=companies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companies.js","sourceRoot":"","sources":["../../../src/api/endpoints/companies.ts"],"names":[],"mappings":";;AAiBA,wDAqBC;AAED,kDA0BC;AAjED,wCAA4C;AAgBrC,KAAK,UAAU,sBAAsB,CAC1C,MAAqB,EACrB,MAAc,EACd,OAAO,GAAG,KAAK;IAEf,MAAM,KAAK,GAAG;;;;;;;GAOb,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAc,EAC/B,MAAM,EACN,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EACzD,OAAO,CACR,CAAC;IAEF,OAAO,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC;AACvC,CAAC;AAEM,KAAK,UAAU,mBAAmB,CACvC,MAAqB,EACrB,MAAc,EACd,SAAiB,EACjB,OAAO,GAAG,KAAK;IAEf,MAAM,KAAK,GAAG;;;;;;;;;;;GAWb,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAc,EAC/B,MAAM,EACN,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EACxE,OAAO,CACR,CAAC;IAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export interface Fund {
3
+ id: string;
4
+ displayName: string;
5
+ vintageYear?: number | null;
6
+ order?: number | null;
7
+ [key: string]: unknown;
8
+ }
9
+ export declare function listFunds(client: AxiosInstance, input?: Record<string, unknown>, verbose?: boolean): Promise<Fund[]>;
10
+ export declare function getFund(client: AxiosInstance, id: string, verbose?: boolean, full?: boolean): Promise<Fund>;
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listFunds = listFunds;
4
+ exports.getFund = getFund;
5
+ const graphql_1 = require("../graphql");
6
+ function hasNonEmptyId(value) {
7
+ return typeof value === 'string' && value.trim().length > 0;
8
+ }
9
+ function normalizeFund(fund) {
10
+ const portfolioSummaryRaw = fund.portfolioSummary;
11
+ if (!Array.isArray(portfolioSummaryRaw)) {
12
+ return fund;
13
+ }
14
+ const portfolioSummary = portfolioSummaryRaw.filter((row) => {
15
+ if (!row || typeof row !== 'object' || Array.isArray(row)) {
16
+ return false;
17
+ }
18
+ return hasNonEmptyId(row.id);
19
+ });
20
+ return {
21
+ ...fund,
22
+ portfolioSummary,
23
+ };
24
+ }
25
+ const FUND_BASE_FIELDS = `
26
+ id
27
+ displayName
28
+ fullLegalName
29
+ legalForm
30
+ companyId
31
+ taxId
32
+ vatId
33
+ incorporationDate
34
+ domicileAddress
35
+ domicileCity
36
+ domicileZip
37
+ web
38
+ phone
39
+ email
40
+ description
41
+ companyDescription
42
+ legalName
43
+ name
44
+ address
45
+ city
46
+ zip
47
+ createdAt
48
+ geographicFocus
49
+ fundSize
50
+ investableCapital
51
+ firstClosingDate
52
+ finalClosingDate
53
+ vintageYear
54
+ reportingPeriodicity
55
+ strategy
56
+ isGuest
57
+ terminationDate
58
+ fxConsolidationDate
59
+ sellingMethod
60
+ costCalcMethod
61
+ fundSizeOther
62
+ operatingCurrency {
63
+ id
64
+ name
65
+ code
66
+ symbol
67
+ }
68
+ currency {
69
+ id
70
+ name
71
+ code
72
+ symbol
73
+ }
74
+ country {
75
+ id
76
+ name
77
+ code
78
+ displayName
79
+ }
80
+ domicileCountry {
81
+ id
82
+ name
83
+ code
84
+ displayName
85
+ }
86
+ domicileRegion {
87
+ id
88
+ name
89
+ level
90
+ }
91
+ investmentStages {
92
+ id
93
+ name
94
+ }
95
+ `;
96
+ const FUND_FULL_FIELDS = `
97
+ ${FUND_BASE_FIELDS}
98
+ logo {
99
+ id
100
+ mime
101
+ type
102
+ name
103
+ path
104
+ pathWithoutAttachment
105
+ thumbnail
106
+ size
107
+ tags
108
+ created
109
+ canBeDeleted
110
+ }
111
+ employees {
112
+ id
113
+ email
114
+ firstName
115
+ lastName
116
+ isLimitedPartner
117
+ isLPPortalUser
118
+ type
119
+ isAdmin
120
+ receiveReminders
121
+ debtMaturityReminders
122
+ position
123
+ }
124
+ aclTemplates {
125
+ id
126
+ name
127
+ createdAt
128
+ updatedAt
129
+ }
130
+ portfolioInvestments {
131
+ id
132
+ displayName
133
+ fullLegalName
134
+ legalForm
135
+ companyId
136
+ taxId
137
+ vatId
138
+ incorporationDate
139
+ domicileAddress
140
+ domicileCity
141
+ domicileZip
142
+ web
143
+ phone
144
+ email
145
+ description
146
+ companyDescription
147
+ legalName
148
+ name
149
+ address
150
+ city
151
+ zip
152
+ createdAt
153
+ }
154
+ portfolioSummary {
155
+ id
156
+ investmentName
157
+ dashboardDetails {
158
+ ownership
159
+ ownershipFD
160
+ investedEquity {
161
+ local
162
+ gp
163
+ }
164
+ investedDebt {
165
+ local
166
+ gp
167
+ }
168
+ investedFunds {
169
+ local
170
+ gp
171
+ }
172
+ totalOriginalCost {
173
+ local
174
+ gp
175
+ }
176
+ irr {
177
+ local
178
+ gp
179
+ }
180
+ multiple {
181
+ local
182
+ gp
183
+ }
184
+ latestInvestmentRoundDate {
185
+ eventDate
186
+ }
187
+ }
188
+ portfolioCompany {
189
+ id
190
+ displayName
191
+ }
192
+ portfolioFund {
193
+ id
194
+ displayName
195
+ }
196
+ sectors {
197
+ id
198
+ name
199
+ code
200
+ level
201
+ root
202
+ description
203
+ generalPartnerCompanyId
204
+ }
205
+ }
206
+ generalPartnerCompany {
207
+ id
208
+ displayName
209
+ fullLegalName
210
+ legalForm
211
+ companyId
212
+ taxId
213
+ vatId
214
+ incorporationDate
215
+ domicileAddress
216
+ domicileCity
217
+ domicileZip
218
+ web
219
+ phone
220
+ email
221
+ description
222
+ companyDescription
223
+ legalName
224
+ name
225
+ address
226
+ city
227
+ zip
228
+ createdAt
229
+ isGuest
230
+ isCopy
231
+ canBeCopied
232
+ pricingType
233
+ type
234
+ }
235
+ extraStaticInfo {
236
+ name
237
+ }
238
+ order
239
+ industryRoot {
240
+ id
241
+ name
242
+ code
243
+ level
244
+ root
245
+ description
246
+ generalPartnerCompanyId
247
+ }
248
+ industryList {
249
+ id
250
+ name
251
+ code
252
+ level
253
+ root
254
+ description
255
+ generalPartnerCompanyId
256
+ }
257
+ investmentSectors {
258
+ id
259
+ name
260
+ code
261
+ level
262
+ root
263
+ description
264
+ generalPartnerCompanyId
265
+ }
266
+ `;
267
+ async function listFunds(client, input, verbose = false) {
268
+ const query = `
269
+ query getFundNames($input: FundsSearch) {
270
+ funds(input: $input) {
271
+ id
272
+ displayName
273
+ vintageYear
274
+ order
275
+ }
276
+ }
277
+ `;
278
+ const data = await (0, graphql_1.executeGraphQL)(client, { query, variables: { input } }, verbose);
279
+ return data.funds ?? [];
280
+ }
281
+ async function getFund(client, id, verbose = false, full = false) {
282
+ const fields = full ? FUND_FULL_FIELDS : FUND_BASE_FIELDS;
283
+ const query = `
284
+ query Fund($input: FundSearch) {
285
+ fund(input: $input) {
286
+ ${fields}
287
+ }
288
+ }
289
+ `;
290
+ const data = await (0, graphql_1.executeGraphQL)(client, { query, variables: { input: { id } } }, verbose);
291
+ return normalizeFund(data.fund);
292
+ }
293
+ //# sourceMappingURL=funds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funds.js","sourceRoot":"","sources":["../../../src/api/endpoints/funds.ts"],"names":[],"mappings":";;AA8RA,8BAsBC;AAED,0BAqBC;AA1UD,wCAA4C;AAkB5C,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CAAC,IAAU;IAC/B,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,aAAa,CAAE,GAAwB,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,IAAI;QACP,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsExB,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACrB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyKnB,CAAC;AAEK,KAAK,UAAU,SAAS,CAC7B,MAAqB,EACrB,KAA+B,EAC/B,OAAO,GAAG,KAAK;IAEf,MAAM,KAAK,GAAG;;;;;;;;;GASb,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAc,EAC/B,MAAM,EACN,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAC/B,OAAO,CACR,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AAC1B,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,MAAqB,EACrB,EAAU,EACV,OAAO,GAAG,KAAK,EACf,IAAI,GAAG,KAAK;IAEZ,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC1D,MAAM,KAAK,GAAG;;;UAGN,MAAM;;;GAGb,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAc,EAC/B,MAAM,EACN,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACvC,OAAO,CACR,CAAC;IACF,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ export declare function listCountries(client: AxiosInstance, verbose?: boolean): Promise<Array<Record<string, unknown>>>;
3
+ export declare function listCurrencies(client: AxiosInstance, verbose?: boolean): Promise<Array<Record<string, unknown>>>;
4
+ export declare function getFxRates(client: AxiosInstance, fundId: string, limit?: number, verbose?: boolean): Promise<Record<string, unknown>>;