Skip to content

Commit c3a34a3

Browse files
authored
Add Fundraising API: Org and Projects endpoints (#14)
* Add fundraising yaml * Update client for fund raising * Add initial fund raising examples * Add m&a endpoint * Extend example * Gen types * Lint * Add organization and projects endpoints * Update client * Update examples and types * Fix imports * Update readme
1 parent ee3600e commit c3a34a3

File tree

8 files changed

+505
-12
lines changed

8 files changed

+505
-12
lines changed

README.md

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,13 @@ const entities = await client.ai.extractEntities({
5555
| Asset | Asset List | `/asset/v1/assets` ||
5656
| Asset | Asset By ID | `/asset/v1/assets/{assetId}` ||
5757
| |
58-
| Intel | TODO | `/intel/v1/events` ||
58+
| Intel | Events | `/intel/v1/events` ||
59+
| Intel | Events By ID | `/intel/v1/events/{eventId}` ||
60+
| Intel | Intel Assets | `/intel/v1/assets` ||
61+
| |
62+
| News | News Assets | `/news/v1/news/assets` ||
63+
| News | News Feed | `/news/v1/news/feed` ||
64+
| News | News Sources | `/news/v1/news/sources` ||
5965
| |
6066
| Marketdata | Marketdata by AssetID | `/marketdata/v1/assets/{assetId}/price` ||
6167
| Marketdata | ROI | `/marketdata/v1/assets/roi` ||
@@ -70,7 +76,22 @@ const entities = await client.ai.extractEntities({
7076
| Marketdata | Exchanges | `/marketdata/v1/exchanges` ||
7177
| Marketdata | Volume Timeseries by ExchangeID | `/marketdata/v1/exchanges/{exchangeId}/volume/time-series` ||
7278
| |
73-
| News | TODO | `/news/v1/news/assets` ||
79+
| AI Digest | Project Recap By ID | `/ai-digest/api/v1/recap` ||
80+
| AI Digest | Exchange Recaps Overview | `/ai-digest/api/v1/exchange-rankings-recap` ||
81+
| AI Digest | Exchange Recap By ID | `/ai-digest/api/v1/exchange-recap` ||
82+
| |
83+
| Research | Reports | `/research/v1/reports` ||
84+
| Research | Report By ID | `/research/v1/reports/{id}` ||
85+
| Research | Report Tags | `/research/v1/reports/tags` ||
86+
| |
87+
| Diligence | Report Preview | `/diligence/v1/reports/preview` ||
88+
| Diligence | Report By Asset ID | `/diligence/v1/report/asset/{assetId}` ||
89+
| |
90+
| Fundraising | Funding Rounds | `/funding/v1/rounds` ||
91+
| Fundraising | Funding Rounds Investors | `/funding/v1/rounds/investors` ||
92+
| Fundraising | Mergers and Acquisitions | `/funding/v1/mergers-and-acquisitions` ||
93+
| Fundraising | Organizations | `/funding/v1/organizations` ||
94+
| Fundraising | Projects | `/funding/v1/projects` ||
7495

7596

7697

packages/api/src/client/base.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ import type {
4444
getFundingRoundsInvestorsParameters,
4545
Investors,
4646
getAcquisitionDealsParameters,
47-
AcquisitionDeal,
47+
Organization,
48+
Project,
4849
getTokenUnlockSupportedAssetsParameters,
4950
getTokenUnlockSupportedAssetsResponse,
5051
getTokenUnlockAllocationsParameters,
@@ -55,6 +56,9 @@ import type {
5556
getTokenUnlocksResponse,
5657
getTokenUnlockEventsParameters,
5758
getTokenUnlockEventsResponse,
59+
AcquisitionDeal,
60+
getOrganizationsParameters,
61+
getProjectsParameters,
5862
} from "@messari-kit/types";
5963
import { LogLevel, type Logger, makeConsoleLogger, createFilteredLogger, noOpLogger } from "../logging";
6064
import type { PaginatedResult, RequestOptions, ClientEventMap, ClientEventType, ClientEventHandler } from "./types";
@@ -287,6 +291,18 @@ export interface FundraisingAPIInterface {
287291
* @param params Query parameters for filtering acquisition deals
288292
*/
289293
getAcquisitionDeals(params?: getAcquisitionDealsParameters): Promise<APIResponseWithMetadata<AcquisitionDeal[]>>;
294+
295+
/**
296+
* Gets a list of all organizations based on provided filters
297+
* @param params Query parameters for filtering organizations
298+
*/
299+
getOrganizations(params?: getOrganizationsParameters): Promise<APIResponseWithMetadata<Organization[]>>;
300+
301+
/**
302+
* Gets a list of all projects based on provided filters
303+
* @param params Query parameters for filtering projects
304+
*/
305+
getProjects(params?: getProjectsParameters): Promise<APIResponseWithMetadata<Project[]>>;
290306
}
291307

292308
/**

packages/api/src/client/client.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import {
2929
getTokenUnlockSupportedAssets,
3030
getTokenUnlocks,
3131
getTokenUnlockVestingSchedule,
32+
getOrganizations,
33+
getProjects,
3234
} from "@messari-kit/types";
3335
import type {
3436
createChatCompletionParameters,
@@ -87,6 +89,10 @@ import type {
8789
getTokenUnlocksResponse,
8890
getTokenUnlockVestingScheduleParameters,
8991
getTokenUnlockVestingScheduleResponse,
92+
getOrganizationsParameters,
93+
getOrganizationsResponse,
94+
getProjectsParameters,
95+
getProjectsResponse,
9096
} from "@messari-kit/types";
9197
import type { Agent } from "node:http";
9298
import { pick } from "../utils";
@@ -825,8 +831,23 @@ export class MessariClient extends MessariClientBase {
825831
queryParams: pick(params, getAcquisitionDeals.queryParams),
826832
});
827833
},
828-
};
829834

835+
getOrganizations: async (params: getOrganizationsParameters) => {
836+
return this.requestWithMetadata<getOrganizationsResponse, PaginationMetadata>({
837+
method: getOrganizations.method,
838+
path: getOrganizations.path(),
839+
queryParams: pick(params, getOrganizations.queryParams),
840+
});
841+
},
842+
843+
getProjects: async (params: getProjectsParameters) => {
844+
return this.requestWithMetadata<getProjectsResponse, PaginationMetadata>({
845+
method: getProjects.method,
846+
path: getProjects.path(),
847+
queryParams: pick(params, getProjects.queryParams),
848+
});
849+
},
850+
};
830851
public readonly tokenUnlocks: TokenUnlocksInterface = {
831852
getSupportedAssets: async (params: getTokenUnlockSupportedAssetsParameters = {}, options?: RequestOptions) => {
832853
return this.request<getTokenUnlockSupportedAssetsResponse>({

packages/examples/src/fundraising.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { MessariClient } from "@messari-kit/api";
22
import { printTable } from "console-table-printer";
3-
import type { getAcquisitionDealsParameters, getFundingRoundsInvestorsParameters, getFundingRoundsParameters } from "@messari-kit/types";
3+
import type {
4+
getAcquisitionDealsParameters,
5+
getFundingRoundsInvestorsParameters,
6+
getFundingRoundsParameters,
7+
getOrganizationsParameters,
8+
getProjectsParameters,
9+
} from "@messari-kit/types";
410
import dotenv from "dotenv";
511

612
// Load environment variables from .env file
@@ -109,6 +115,46 @@ async function main() {
109115
} catch (error) {
110116
console.error("Error calling getAcquisitionDeals:", error);
111117
}
118+
119+
// Get the organizations
120+
try {
121+
const orgsParams: getOrganizationsParameters = { page: 1, limit: 10 };
122+
const resp = await client.fundraising.getOrganizations(orgsParams);
123+
console.log("\n--------------------------------");
124+
console.log("Organizations");
125+
console.log("--------------------------------");
126+
const orgs = resp.data;
127+
if (orgs.length > 0) {
128+
const rows = orgs.map((o) => ({
129+
"Id": o.id,
130+
"Name": o.name,
131+
"Location": o.location,
132+
}));
133+
printTable(rows);
134+
}
135+
} catch (error) {
136+
console.error("Error calling getOrganizations:", error);
137+
}
138+
139+
// Get the projects
140+
try {
141+
const projectsParams: getProjectsParameters = { page: 1, limit: 10 };
142+
const resp = await client.fundraising.getProjects(projectsParams);
143+
console.log("\n--------------------------------");
144+
console.log("Projects");
145+
console.log("--------------------------------");
146+
const projects = resp.data;
147+
if (projects.length > 0) {
148+
const rows = projects.map((p) => ({
149+
"Id": p.id,
150+
"Name": p.name,
151+
"Tags": p.tags?.join(", "),
152+
}));
153+
printTable(rows);
154+
}
155+
} catch (error) {
156+
console.error("Error calling getProjects:", error);
157+
}
112158
}
113159

114160
main().catch(console.error);

packages/types/src/index.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,36 @@ export const getAcquisitionDeals = {
392392
} as const;
393393

394394

395+
export type getOrganizationsResponse = components['schemas']['Organization'][];
396+
export type getOrganizationsError = components['schemas']['APIError'];
397+
398+
export type getOrganizationsParameters = { id?: string; category?: string; sector?: string; tags?: string; foundedBefore?: string; foundedAfter?: string; page?: number; limit?: number };
399+
400+
401+
export const getOrganizations = {
402+
method: 'GET' as const,
403+
pathParams: [] as const,
404+
queryParams: ['id', 'category', 'sector', 'tags', 'foundedBefore', 'foundedAfter', 'page', 'limit'] as const,
405+
bodyParams: [] as const,
406+
path: () => '/funding/v1/organizations'
407+
} as const;
408+
409+
410+
export type getProjectsResponse = components['schemas']['Project'][];
411+
export type getProjectsError = components['schemas']['APIError'];
412+
413+
export type getProjectsParameters = { id?: string; category?: string; sector?: string; tags?: string; foundedBefore?: string; foundedAfter?: string; page?: number; limit?: number };
414+
415+
416+
export const getProjects = {
417+
method: 'GET' as const,
418+
pathParams: [] as const,
419+
queryParams: ['id', 'category', 'sector', 'tags', 'foundedBefore', 'foundedAfter', 'page', 'limit'] as const,
420+
bodyParams: [] as const,
421+
path: () => '/funding/v1/projects'
422+
} as const;
423+
424+
395425
export type getTokenUnlockSupportedAssetsResponse = components['schemas']['TokenUnlockSupportedAsset'][];
396426
export type getTokenUnlockSupportedAssetsError = components['schemas']['APIError'];
397427

0 commit comments

Comments
 (0)