roicai 0.1.0 → 0.2.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/README.md +385 -33
- package/dist/generated/calendar/earnings/client.d.ts +16 -0
- package/dist/generated/calendar/earnings/client.js +1 -1
- package/dist/generated/calendar/earnings/client.js.map +1 -1
- package/dist/generated/companies/employees/client.d.ts +16 -0
- package/dist/generated/companies/employees/client.js +1 -1
- package/dist/generated/companies/employees/client.js.map +1 -1
- package/dist/generated/earningsCalls/client.d.ts +16 -0
- package/dist/generated/earningsCalls/client.js +1 -1
- package/dist/generated/earningsCalls/client.js.map +1 -1
- package/dist/generated/forexPrices/client.d.ts +16 -0
- package/dist/generated/forexPrices/client.js +1 -1
- package/dist/generated/forexPrices/client.js.map +1 -1
- package/dist/generated/fundamentals/balanceSheets/client.d.ts +32 -0
- package/dist/generated/fundamentals/balanceSheets/client.js +1 -1
- package/dist/generated/fundamentals/balanceSheets/client.js.map +1 -1
- package/dist/generated/fundamentals/cashFlowStatements/client.d.ts +32 -0
- package/dist/generated/fundamentals/cashFlowStatements/client.js +1 -1
- package/dist/generated/fundamentals/cashFlowStatements/client.js.map +1 -1
- package/dist/generated/fundamentals/enterpriseValues/client.d.ts +32 -0
- package/dist/generated/fundamentals/enterpriseValues/client.js +1 -1
- package/dist/generated/fundamentals/enterpriseValues/client.js.map +1 -1
- package/dist/generated/fundamentals/incomeStatements/client.d.ts +32 -0
- package/dist/generated/fundamentals/incomeStatements/client.js +1 -1
- package/dist/generated/fundamentals/incomeStatements/client.js.map +1 -1
- package/dist/generated/fundamentals/multiples/client.d.ts +32 -0
- package/dist/generated/fundamentals/multiples/client.js +1 -1
- package/dist/generated/fundamentals/multiples/client.js.map +1 -1
- package/dist/generated/fundamentals/perShareMetrics/client.d.ts +32 -0
- package/dist/generated/fundamentals/perShareMetrics/client.js +1 -1
- package/dist/generated/fundamentals/perShareMetrics/client.js.map +1 -1
- package/dist/generated/fundamentals/ratios/credit/client.d.ts +32 -0
- package/dist/generated/fundamentals/ratios/credit/client.js +1 -1
- package/dist/generated/fundamentals/ratios/credit/client.js.map +1 -1
- package/dist/generated/fundamentals/ratios/liquidity/client.d.ts +32 -0
- package/dist/generated/fundamentals/ratios/liquidity/client.js +1 -1
- package/dist/generated/fundamentals/ratios/liquidity/client.js.map +1 -1
- package/dist/generated/fundamentals/ratios/profitability/client.d.ts +32 -0
- package/dist/generated/fundamentals/ratios/profitability/client.js +1 -1
- package/dist/generated/fundamentals/ratios/profitability/client.js.map +1 -1
- package/dist/generated/fundamentals/ratios/workingCapital/client.d.ts +32 -0
- package/dist/generated/fundamentals/ratios/workingCapital/client.js +1 -1
- package/dist/generated/fundamentals/ratios/workingCapital/client.js.map +1 -1
- package/dist/generated/fundamentals/ratios/yieldAnalysis/client.d.ts +32 -0
- package/dist/generated/fundamentals/ratios/yieldAnalysis/client.js +1 -1
- package/dist/generated/fundamentals/ratios/yieldAnalysis/client.js.map +1 -1
- package/dist/generated/stockPrices/client.d.ts +16 -0
- package/dist/generated/stockPrices/client.js +1 -1
- package/dist/generated/stockPrices/client.js.map +1 -1
- package/dist/generated/stockSplits/client.d.ts +16 -0
- package/dist/generated/stockSplits/client.js +1 -1
- package/dist/generated/stockSplits/client.js.map +1 -1
- package/dist/index.d.ts +12 -2
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/pagination.d.ts +42 -0
- package/dist/pagination.js +92 -0
- package/dist/pagination.js.map +1 -0
- package/package.json +16 -9
|
@@ -14,7 +14,7 @@ export function bind(transport) {
|
|
|
14
14
|
const ListOperation = {
|
|
15
15
|
method: "GET",
|
|
16
16
|
route: "/v3.0.0/fundamental/ratios/yield-analysis/{identifier}",
|
|
17
|
-
query: { apikey: "apikey", periodType: "period_type", periodLabel: "period_label", date: "date", order: "order", limit: "limit", page: "page" },
|
|
17
|
+
query: { apikey: "apikey", periodType: "period_type", periodLabel: "period_label", date: "date", dateGte: "date.gte", dateGt: "date.gt", dateLte: "date.lte", dateLt: "date.lt", fiscalYearGte: "fiscal_year.gte", fiscalYearGt: "fiscal_year.gt", fiscalYearLte: "fiscal_year.lte", fiscalYearLt: "fiscal_year.lt", order: "order", limit: "limit", page: "page" },
|
|
18
18
|
response: V3YieldAnalysisFinancialPeriodListCodec,
|
|
19
19
|
errors: { "400": V3ErrorCodec, "401": V3ErrorCodec, "402": V3ErrorCodec, "404": V3ErrorCodec, "429": V3ErrorCodec, "500": V3ErrorCodec, "503": V3ErrorCodec },
|
|
20
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../src/generated/fundamentals/ratios/yieldAnalysis/client.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,oBAAoB;AAEpB,OAAO,EAIL,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAEL,uCAAuC,GACxC,MAAM,aAAa,CAAC;AAkBrB,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,SAAoB;IACvC,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC;KAC5E,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../src/generated/fundamentals/ratios/yieldAnalysis/client.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,oBAAoB;AAEpB,OAAO,EAIL,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAEL,uCAAuC,GACxC,MAAM,aAAa,CAAC;AAkBrB,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,SAAoB;IACvC,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC;KAC5E,CAAC;AACJ,CAAC;AAiED,MAAM,aAAa,GAAc;IAC/B,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,wDAAwD;IAC/D,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IACnW,QAAQ,EAAE,uCAAuC;IACjD,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;CAC9J,CAAC"}
|
|
@@ -36,6 +36,22 @@ export interface ListRequest {
|
|
|
36
36
|
* Return prices from exactly this date.
|
|
37
37
|
*/
|
|
38
38
|
date?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Return prices whose date is on or after this date.
|
|
41
|
+
*/
|
|
42
|
+
dateGte?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Return prices whose date is strictly after this date.
|
|
45
|
+
*/
|
|
46
|
+
dateGt?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Return prices whose date is on or before this date.
|
|
49
|
+
*/
|
|
50
|
+
dateLte?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Return prices whose date is strictly before this date.
|
|
53
|
+
*/
|
|
54
|
+
dateLt?: string;
|
|
39
55
|
adjustment?: "none" | "splits" | "total_return";
|
|
40
56
|
adjusted?: "true" | "false";
|
|
41
57
|
order?: "asc" | "desc";
|
|
@@ -24,7 +24,7 @@ export function bind(transport) {
|
|
|
24
24
|
const ListOperation = {
|
|
25
25
|
method: "GET",
|
|
26
26
|
route: "/v3.0.0/stock-prices/{identifier}",
|
|
27
|
-
query: { apikey: "apikey", date: "date", adjustment: "adjustment", adjusted: "adjusted", order: "order", limit: "limit", page: "page" },
|
|
27
|
+
query: { apikey: "apikey", date: "date", dateGte: "date.gte", dateGt: "date.gt", dateLte: "date.lte", dateLt: "date.lt", adjustment: "adjustment", adjusted: "adjusted", order: "order", limit: "limit", page: "page" },
|
|
28
28
|
response: V3HistoricalPriceListCodec,
|
|
29
29
|
errors: { "400": V3ErrorCodec, "401": V3ErrorCodec, "402": V3ErrorCodec, "404": V3ErrorCodec, "429": V3ErrorCodec, "500": V3ErrorCodec, "503": V3ErrorCodec },
|
|
30
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/generated/stockPrices/client.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,oBAAoB;AAEpB,OAAO,EAIL,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAA6B,IAAI,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAEL,IAAI,IAAI,UAAU,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAqBrB,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,SAAoB;IACvC,IAAI,UAAkC,CAAC;IACvC,IAAI,YAAsC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC;QAC3E,IAAI,IAAI;YACN,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM;YACR,OAAO,CAAC,YAAY,KAAK,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/generated/stockPrices/client.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,oBAAoB;AAEpB,OAAO,EAIL,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAA6B,IAAI,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAEL,IAAI,IAAI,UAAU,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAqBrB,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,SAAoB;IACvC,IAAI,UAAkC,CAAC;IACvC,IAAI,YAAsC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC;QAC3E,IAAI,IAAI;YACN,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM;YACR,OAAO,CAAC,YAAY,KAAK,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC;AAiDD,MAAM,aAAa,GAAc;IAC/B,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,mCAAmC;IAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IACvN,QAAQ,EAAE,0BAA0B;IACpC,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;CAC9J,CAAC"}
|
|
@@ -34,6 +34,22 @@ export interface ListRequest {
|
|
|
34
34
|
* Return splits executed on exactly this date.
|
|
35
35
|
*/
|
|
36
36
|
date?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Return splits whose execution date is on or after this date.
|
|
39
|
+
*/
|
|
40
|
+
dateGte?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Return splits whose execution date is strictly after this date.
|
|
43
|
+
*/
|
|
44
|
+
dateGt?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Return splits whose execution date is on or before this date.
|
|
47
|
+
*/
|
|
48
|
+
dateLte?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Return splits whose execution date is strictly before this date.
|
|
51
|
+
*/
|
|
52
|
+
dateLt?: string;
|
|
37
53
|
order?: "asc" | "desc";
|
|
38
54
|
/**
|
|
39
55
|
* Maximum number of resources to return. Defaults to 100.
|
|
@@ -14,7 +14,7 @@ export function bind(transport) {
|
|
|
14
14
|
const ListOperation = {
|
|
15
15
|
method: "GET",
|
|
16
16
|
route: "/v3.0.0/stock-splits",
|
|
17
|
-
query: { apikey: "apikey", identifier: "identifier", date: "date", order: "order", limit: "limit", page: "page" },
|
|
17
|
+
query: { apikey: "apikey", identifier: "identifier", date: "date", dateGte: "date.gte", dateGt: "date.gt", dateLte: "date.lte", dateLt: "date.lt", order: "order", limit: "limit", page: "page" },
|
|
18
18
|
response: V3StockSplitListCodec,
|
|
19
19
|
errors: { "400": V3ErrorCodec, "401": V3ErrorCodec, "402": V3ErrorCodec, "429": V3ErrorCodec, "500": V3ErrorCodec, "503": V3ErrorCodec },
|
|
20
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/generated/stockSplits/client.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,oBAAoB;AAEpB,OAAO,EAIL,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAyB,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAmB3E,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,SAAoB;IACvC,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC;KAC5E,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/generated/stockSplits/client.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,oBAAoB;AAEpB,OAAO,EAIL,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAyB,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAmB3E,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,SAAoB;IACvC,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC;KAC5E,CAAC;AACJ,CAAC;AAiDD,MAAM,aAAa,GAAc;IAC/B,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,sBAAsB;IAC7B,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IACjM,QAAQ,EAAE,qBAAqB;IAC/B,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;CACzI,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { type ClientOptions as GeneratedClientOptions } from './generated/index.js';
|
|
1
|
+
import { type Client as GeneratedClient, type ClientOptions as GeneratedClientOptions } from './generated/index.js';
|
|
2
|
+
import { type Paginated } from './pagination.js';
|
|
2
3
|
export * from './generated/index.js';
|
|
4
|
+
export type { Page, PagePromise, Paginated } from './pagination.js';
|
|
3
5
|
/**
|
|
4
6
|
* The URL of the ROIC.ai API.
|
|
5
7
|
*/
|
|
@@ -14,12 +16,20 @@ export interface ClientOptions extends Omit<GeneratedClientOptions, 'baseUrl'> {
|
|
|
14
16
|
*/
|
|
15
17
|
baseUrl?: string;
|
|
16
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* A client of the ROIC.ai API. Its list methods return a {@link PagePromise}:
|
|
21
|
+
* await it for the first page, or iterate it with `for await` for every item.
|
|
22
|
+
*/
|
|
23
|
+
export type Client = Paginated<GeneratedClient>;
|
|
17
24
|
/**
|
|
18
25
|
* Returns a client of the ROIC.ai API.
|
|
19
26
|
*
|
|
20
27
|
* ```ts
|
|
21
28
|
* const roicai = createClient({ token: process.env.ROICAI_API_KEY! });
|
|
22
29
|
* const ticker = await roicai.tickers.retrieve({ identifier: 'NASDAQ:AAPL' });
|
|
30
|
+
* for await (const price of roicai.stockPrices.list({ identifier: 'NASDAQ:AAPL', dateGte: '2025-01-01' })) {
|
|
31
|
+
* console.log(price.date, price.close);
|
|
32
|
+
* }
|
|
23
33
|
* ```
|
|
24
34
|
*/
|
|
25
|
-
export declare function createClient(options: ClientOptions):
|
|
35
|
+
export declare function createClient(options: ClientOptions): Client;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { createClient as createGeneratedClient } from './generated/index.js';
|
|
1
|
+
import { createClient as createGeneratedClient, } from './generated/index.js';
|
|
2
|
+
import { paginate } from './pagination.js';
|
|
2
3
|
export * from './generated/index.js';
|
|
3
4
|
/**
|
|
4
5
|
* The URL of the ROIC.ai API.
|
|
@@ -10,9 +11,12 @@ export const DEFAULT_BASE_URL = 'https://api.roic.ai';
|
|
|
10
11
|
* ```ts
|
|
11
12
|
* const roicai = createClient({ token: process.env.ROICAI_API_KEY! });
|
|
12
13
|
* const ticker = await roicai.tickers.retrieve({ identifier: 'NASDAQ:AAPL' });
|
|
14
|
+
* for await (const price of roicai.stockPrices.list({ identifier: 'NASDAQ:AAPL', dateGte: '2025-01-01' })) {
|
|
15
|
+
* console.log(price.date, price.close);
|
|
16
|
+
* }
|
|
13
17
|
* ```
|
|
14
18
|
*/
|
|
15
19
|
export function createClient(options) {
|
|
16
|
-
return createGeneratedClient({ ...options, baseUrl: options.baseUrl ?? DEFAULT_BASE_URL });
|
|
20
|
+
return paginate(createGeneratedClient({ ...options, baseUrl: options.baseUrl ?? DEFAULT_BASE_URL }));
|
|
17
21
|
}
|
|
18
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,IAAI,qBAAqB,GACtC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAkB,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D,cAAc,sBAAsB,CAAC;AAGrC;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAmBtD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,OAAO,QAAQ,CAAC,qBAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACvG,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A page of a list: its items in `data`, and the URL of the next page, or
|
|
3
|
+
* `null` on the last page.
|
|
4
|
+
*/
|
|
5
|
+
export interface Page<T> {
|
|
6
|
+
data: T[];
|
|
7
|
+
nextPageUrl: string | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The result of a method that lists: await it for the first page, or iterate
|
|
11
|
+
* it with `for await` for every item of every page, fetching each page as it
|
|
12
|
+
* is reached.
|
|
13
|
+
*/
|
|
14
|
+
export interface PagePromise<P extends Page<T>, T> extends Promise<P>, AsyncIterable<T> {
|
|
15
|
+
/**
|
|
16
|
+
* Calls `onItem` with every item of every page, in order, and waits for
|
|
17
|
+
* any promise it returns. Stops early when `onItem` returns `false`.
|
|
18
|
+
*/
|
|
19
|
+
autoPagingEach(onItem: (item: T) => boolean | void | Promise<boolean | void>): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Returns the items of every page, up to `limit` of them. `limit` is
|
|
22
|
+
* required and at most 10,000, so a long list can't use up memory; iterate
|
|
23
|
+
* longer lists with `for await` or {@link autoPagingEach}.
|
|
24
|
+
*/
|
|
25
|
+
autoPagingToArray(options: {
|
|
26
|
+
limit: number;
|
|
27
|
+
}): Promise<T[]>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The client `C`, with each method that returns a {@link Page} returning a
|
|
31
|
+
* {@link PagePromise} instead.
|
|
32
|
+
*/
|
|
33
|
+
export type Paginated<C> = {
|
|
34
|
+
[K in keyof C]: C[K] extends (...args: infer A) => Promise<infer P> ? P extends Page<infer T> ? (...args: A) => PagePromise<P, T> : C[K] : C[K] extends object ? Paginated<C[K]> : C[K];
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Returns `client` with its list methods returning {@link PagePromise}s. Each
|
|
38
|
+
* next page is the same request with the `page` token of the previous page's
|
|
39
|
+
* `nextPageUrl`, since the API only accepts a token with the filters it was
|
|
40
|
+
* issued for.
|
|
41
|
+
*/
|
|
42
|
+
export declare function paginate<C extends object>(client: C): Paginated<C>;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const MAX_TO_ARRAY = 10_000;
|
|
2
|
+
// The methods whose responses can be pages.
|
|
3
|
+
const LIST_METHODS = new Set(['list', 'search']);
|
|
4
|
+
/**
|
|
5
|
+
* Returns `client` with its list methods returning {@link PagePromise}s. Each
|
|
6
|
+
* next page is the same request with the `page` token of the previous page's
|
|
7
|
+
* `nextPageUrl`, since the API only accepts a token with the filters it was
|
|
8
|
+
* issued for.
|
|
9
|
+
*/
|
|
10
|
+
export function paginate(client) {
|
|
11
|
+
return wrap(client, new WeakMap());
|
|
12
|
+
}
|
|
13
|
+
function wrap(target, cache) {
|
|
14
|
+
const cached = cache.get(target);
|
|
15
|
+
if (cached)
|
|
16
|
+
return cached;
|
|
17
|
+
const proxy = new Proxy(target, {
|
|
18
|
+
get(obj, key, receiver) {
|
|
19
|
+
const value = Reflect.get(obj, key, receiver);
|
|
20
|
+
if (typeof value === 'function' && typeof key === 'string' && LIST_METHODS.has(key)) {
|
|
21
|
+
return (request, options) => {
|
|
22
|
+
const fetchPage = (page) => value.call(obj, page === undefined ? request : { ...request, page }, options);
|
|
23
|
+
return pagePromise(fetchPage(), fetchPage);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (typeof value === 'object' && value !== null) {
|
|
27
|
+
return wrap(value, cache);
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
cache.set(target, proxy);
|
|
33
|
+
return proxy;
|
|
34
|
+
}
|
|
35
|
+
function pagePromise(first, fetchPage) {
|
|
36
|
+
async function* items() {
|
|
37
|
+
let page = await first;
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
for (;;) {
|
|
40
|
+
if (!isPage(page)) {
|
|
41
|
+
throw new TypeError('The response is not a page of a list, so it cannot be iterated.');
|
|
42
|
+
}
|
|
43
|
+
yield* page.data;
|
|
44
|
+
const token = nextToken(page.nextPageUrl);
|
|
45
|
+
// A token already followed would loop forever.
|
|
46
|
+
if (token === null || seen.has(token))
|
|
47
|
+
return;
|
|
48
|
+
seen.add(token);
|
|
49
|
+
page = await fetchPage(token);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function autoPagingEach(onItem) {
|
|
53
|
+
for await (const item of items()) {
|
|
54
|
+
if ((await onItem(item)) === false)
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function autoPagingToArray(options) {
|
|
59
|
+
const limit = options?.limit;
|
|
60
|
+
if (!Number.isInteger(limit) || limit < 1) {
|
|
61
|
+
throw new TypeError('autoPagingToArray needs a positive integer limit, such as { limit: 1000 }.');
|
|
62
|
+
}
|
|
63
|
+
if (limit > MAX_TO_ARRAY) {
|
|
64
|
+
throw new TypeError(`autoPagingToArray takes a limit of at most ${MAX_TO_ARRAY}; iterate longer lists with for await or autoPagingEach.`);
|
|
65
|
+
}
|
|
66
|
+
const result = [];
|
|
67
|
+
for await (const item of items()) {
|
|
68
|
+
result.push(item);
|
|
69
|
+
if (result.length >= limit)
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
return Object.assign(first, {
|
|
75
|
+
[Symbol.asyncIterator]: items,
|
|
76
|
+
autoPagingEach,
|
|
77
|
+
autoPagingToArray,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function isPage(value) {
|
|
81
|
+
return (typeof value === 'object' &&
|
|
82
|
+
value !== null &&
|
|
83
|
+
Array.isArray(value.data) &&
|
|
84
|
+
'nextPageUrl' in value);
|
|
85
|
+
}
|
|
86
|
+
function nextToken(nextPageUrl) {
|
|
87
|
+
if (!nextPageUrl)
|
|
88
|
+
return null;
|
|
89
|
+
// The URL may be relative; the base only lets it parse.
|
|
90
|
+
return new URL(nextPageUrl, 'https://api.roic.ai').searchParams.get('page');
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "roicai",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Official Node.js and TypeScript client for the ROIC.ai financial data and stock API: fundamentals, earnings calls, prices",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "ROIC.ai",
|
|
7
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://www.roic.ai/api",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/roicai/roicai-node.git"
|
|
@@ -14,12 +14,19 @@
|
|
|
14
14
|
},
|
|
15
15
|
"keywords": [
|
|
16
16
|
"roicai",
|
|
17
|
-
"
|
|
18
|
-
"financial data",
|
|
19
|
-
"
|
|
17
|
+
"stock api",
|
|
18
|
+
"financial data api",
|
|
19
|
+
"stock market api",
|
|
20
|
+
"market data api",
|
|
21
|
+
"stock price api",
|
|
22
|
+
"historical stock data",
|
|
20
23
|
"fundamentals",
|
|
21
|
-
"
|
|
22
|
-
"
|
|
24
|
+
"financial statements",
|
|
25
|
+
"financial ratios",
|
|
26
|
+
"earnings call transcripts",
|
|
27
|
+
"sec filings",
|
|
28
|
+
"typescript",
|
|
29
|
+
"nodejs",
|
|
23
30
|
"sdk"
|
|
24
31
|
],
|
|
25
32
|
"type": "module",
|
|
@@ -37,7 +44,7 @@
|
|
|
37
44
|
"scripts": {
|
|
38
45
|
"generate": "scripts/generate.sh",
|
|
39
46
|
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
40
|
-
"test": "node --test test/client.test.mjs test/live.test.mjs",
|
|
47
|
+
"test": "tsc -p test/tsconfig.json && node --test test/client.test.mjs test/live.test.mjs",
|
|
41
48
|
"prepublishOnly": "npm run build && npm test"
|
|
42
49
|
},
|
|
43
50
|
"devDependencies": {
|