@chadwin/sdk 0.1.0 → 0.3.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/dist/index.cjs +32 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +133 -27
- package/dist/index.d.ts +133 -27
- package/dist/index.js +32 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -432,33 +432,33 @@ var InsiderTransactions = class {
|
|
|
432
432
|
}
|
|
433
433
|
transport;
|
|
434
434
|
list({
|
|
435
|
-
|
|
436
|
-
|
|
435
|
+
from,
|
|
436
|
+
until,
|
|
437
437
|
tickers,
|
|
438
438
|
transactionCodes
|
|
439
439
|
}) {
|
|
440
440
|
return this.transport.request({
|
|
441
441
|
path: ["v1", "insider-transactions"],
|
|
442
442
|
query: {
|
|
443
|
-
from
|
|
443
|
+
from,
|
|
444
444
|
tickers: commaSeparated(tickers),
|
|
445
445
|
transaction_codes: commaSeparated(transactionCodes),
|
|
446
|
-
until
|
|
446
|
+
until
|
|
447
447
|
}
|
|
448
448
|
});
|
|
449
449
|
}
|
|
450
450
|
listForCompany({
|
|
451
451
|
ticker,
|
|
452
|
-
|
|
453
|
-
|
|
452
|
+
from,
|
|
453
|
+
until,
|
|
454
454
|
transactionCodes
|
|
455
455
|
}) {
|
|
456
456
|
return this.transport.request({
|
|
457
457
|
path: ["v1", "companies", "US", ticker, "insider-transactions"],
|
|
458
458
|
query: {
|
|
459
|
-
from
|
|
459
|
+
from,
|
|
460
460
|
transaction_codes: commaSeparated(transactionCodes),
|
|
461
|
-
until
|
|
461
|
+
until
|
|
462
462
|
}
|
|
463
463
|
});
|
|
464
464
|
}
|
|
@@ -482,27 +482,27 @@ var ProposedSales = class {
|
|
|
482
482
|
}
|
|
483
483
|
transport;
|
|
484
484
|
list({
|
|
485
|
-
|
|
486
|
-
|
|
485
|
+
from,
|
|
486
|
+
until,
|
|
487
487
|
tickers
|
|
488
488
|
}) {
|
|
489
489
|
return this.transport.request({
|
|
490
490
|
path: ["v1", "proposed-sales"],
|
|
491
491
|
query: {
|
|
492
|
-
from
|
|
492
|
+
from,
|
|
493
493
|
tickers: commaSeparated(tickers),
|
|
494
|
-
until
|
|
494
|
+
until
|
|
495
495
|
}
|
|
496
496
|
});
|
|
497
497
|
}
|
|
498
498
|
listForCompany({
|
|
499
499
|
ticker,
|
|
500
|
-
|
|
501
|
-
|
|
500
|
+
from,
|
|
501
|
+
until
|
|
502
502
|
}) {
|
|
503
503
|
return this.transport.request({
|
|
504
504
|
path: ["v1", "companies", "US", ticker, "proposed-sales"],
|
|
505
|
-
query: { from
|
|
505
|
+
query: { from, until }
|
|
506
506
|
});
|
|
507
507
|
}
|
|
508
508
|
getFiling({
|
|
@@ -562,6 +562,14 @@ var InstitutionalManagers = class {
|
|
|
562
562
|
this.transport = transport;
|
|
563
563
|
}
|
|
564
564
|
transport;
|
|
565
|
+
search({
|
|
566
|
+
query
|
|
567
|
+
}) {
|
|
568
|
+
return this.transport.request({
|
|
569
|
+
path: ["v1", "institutional-holdings", "managers", "search"],
|
|
570
|
+
query: { query }
|
|
571
|
+
});
|
|
572
|
+
}
|
|
565
573
|
list({
|
|
566
574
|
cik,
|
|
567
575
|
form13fFileNumber,
|
|
@@ -605,7 +613,7 @@ var InstitutionalManagers = class {
|
|
|
605
613
|
}
|
|
606
614
|
listHoldings({
|
|
607
615
|
form13fFileNumber,
|
|
608
|
-
|
|
616
|
+
period,
|
|
609
617
|
cursor,
|
|
610
618
|
limit
|
|
611
619
|
}) {
|
|
@@ -617,12 +625,12 @@ var InstitutionalManagers = class {
|
|
|
617
625
|
form13fFileNumber,
|
|
618
626
|
"holdings"
|
|
619
627
|
],
|
|
620
|
-
query: { cursor, limit, period
|
|
628
|
+
query: { cursor, limit, period }
|
|
621
629
|
});
|
|
622
630
|
}
|
|
623
631
|
listPositions({
|
|
624
632
|
form13fFileNumber,
|
|
625
|
-
|
|
633
|
+
period,
|
|
626
634
|
cursor,
|
|
627
635
|
limit
|
|
628
636
|
}) {
|
|
@@ -634,10 +642,10 @@ var InstitutionalManagers = class {
|
|
|
634
642
|
form13fFileNumber,
|
|
635
643
|
"positions"
|
|
636
644
|
],
|
|
637
|
-
query: { cursor, limit, period
|
|
645
|
+
query: { cursor, limit, period }
|
|
638
646
|
});
|
|
639
647
|
}
|
|
640
|
-
async *
|
|
648
|
+
async *iterateManagers({
|
|
641
649
|
cik,
|
|
642
650
|
form13fFileNumber,
|
|
643
651
|
limit
|
|
@@ -656,14 +664,14 @@ var InstitutionalManagers = class {
|
|
|
656
664
|
}
|
|
657
665
|
async *iterateHoldings({
|
|
658
666
|
form13fFileNumber,
|
|
659
|
-
|
|
667
|
+
period,
|
|
660
668
|
limit
|
|
661
669
|
}) {
|
|
662
670
|
let cursor;
|
|
663
671
|
do {
|
|
664
672
|
const page = await this.listHoldings({
|
|
665
673
|
form13fFileNumber,
|
|
666
|
-
|
|
674
|
+
period,
|
|
667
675
|
...cursor === void 0 ? {} : { cursor },
|
|
668
676
|
...limit === void 0 ? {} : { limit }
|
|
669
677
|
});
|
|
@@ -673,14 +681,14 @@ var InstitutionalManagers = class {
|
|
|
673
681
|
}
|
|
674
682
|
async *iteratePositions({
|
|
675
683
|
form13fFileNumber,
|
|
676
|
-
|
|
684
|
+
period,
|
|
677
685
|
limit
|
|
678
686
|
}) {
|
|
679
687
|
let cursor;
|
|
680
688
|
do {
|
|
681
689
|
const page = await this.listPositions({
|
|
682
690
|
form13fFileNumber,
|
|
683
|
-
|
|
691
|
+
period,
|
|
684
692
|
...cursor === void 0 ? {} : { cursor },
|
|
685
693
|
...limit === void 0 ? {} : { limit }
|
|
686
694
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/error.ts","../src/promise.ts","../src/internal/transport.ts","../src/resources/feeds.ts","../src/resources/products.ts","../src/client.ts"],"sourcesContent":["export { Chadwin, type ClientOptions } from \"./client\";\nexport { APIError } from \"./error\";\nexport type { PromiseWithResponse } from \"./promise\";\nexport type {\n CompanyReportFeedFilters,\n CompanyReportForm,\n InsiderActivityFeedFilters,\n InsiderActivityForm,\n InsiderTransactionCode,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n InstitutionalFilingForm,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"./types\";\n","export interface APIErrorOptions {\n status?: number;\n code?: string;\n headers?: Headers;\n}\n\nexport class APIError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly headers: Headers | undefined;\n\n constructor(message: string, options: APIErrorOptions = {}) {\n super(message);\n this.name = \"APIError\";\n this.status = options.status;\n this.code = options.code;\n this.headers = options.headers;\n }\n}\n","export interface PromiseWithResponse<T> extends Promise<T> {\n withResponse(): Promise<{ data: T; response: Response }>;\n}\n\nexport function createPromiseWithResponse<T>(\n response: Promise<{ data: T; response: Response }>,\n): PromiseWithResponse<T> {\n const promise = response.then(({ data }) => data) as PromiseWithResponse<T>;\n\n Object.defineProperty(promise, \"withResponse\", {\n value: () => response,\n });\n\n // A caller may consume only withResponse(). Mark this branch as handled while\n // preserving the original rejection for ordinary await and Promise chaining.\n void promise.catch(() => undefined);\n return promise;\n}\n","import { APIError } from \"../error\";\nimport {\n createPromiseWithResponse,\n type PromiseWithResponse,\n} from \"../promise\";\n\nexport const ATTEMPT_TIMEOUT_MS = 30_000;\nexport const MAX_RETRIES = 2;\nexport const BASE_RETRY_DELAY_MS = 250;\nexport const MAX_RETRY_DELAY_MS = 30_000;\n\nconst PRODUCTION_BASE_URL = \"https://api.chadwin.co\";\nconst INVALID_BASE_URL_MESSAGE =\n \"baseURL must be an HTTP or HTTPS URL without credentials, a query, or a fragment\";\nconst SAFE_ERROR_CODE = /^[a-z][a-z0-9_]{0,63}$/;\n\ntype QueryScalar = boolean | number | string;\n\nexport type QueryValue =\n | QueryScalar\n | readonly QueryScalar[]\n | null\n | undefined;\n\nexport interface TransportRequest {\n path: readonly string[];\n query?: Readonly<Record<string, QueryValue>>;\n responseType?: \"json\" | \"text\";\n}\n\ninterface HttpTransportOptions {\n apiKey: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\ninterface AttemptErrorResponse {\n code: string | undefined;\n response: Response;\n}\n\nclass AttemptFailure extends Error {\n constructor(readonly timedOut: boolean) {\n super(timedOut ? \"Request timed out\" : \"Network request failed\");\n }\n}\n\nexport class HttpTransport {\n readonly #apiKey: string;\n readonly #fetch: typeof fetch;\n readonly #baseURL: URL;\n\n constructor(options: HttpTransportOptions) {\n this.#apiKey = options.apiKey;\n this.#baseURL = normalizeBaseURL(options.baseURL ?? PRODUCTION_BASE_URL);\n this.#fetch = options.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n\n request<T>(request: TransportRequest): PromiseWithResponse<T> {\n return createPromiseWithResponse(this.#performRequest<T>(request));\n }\n\n async #performRequest<T>(\n request: TransportRequest,\n ): Promise<{ data: T; response: Response }> {\n const url = buildUrl(this.#baseURL, request);\n let lastFailureWasTimeout = false;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n let result: { data: T; response: Response } | AttemptErrorResponse;\n try {\n result = await this.#attempt<T>(url, request.responseType ?? \"json\");\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n if (!(error instanceof AttemptFailure)) {\n throw new APIError(\"API request failed\");\n }\n lastFailureWasTimeout = error.timedOut;\n if (attempt === MAX_RETRIES) {\n throw new APIError(\n lastFailureWasTimeout\n ? \"API request timed out\"\n : \"API request failed\",\n );\n }\n await wait(backoffDelay(attempt));\n continue;\n }\n\n if (\"data\" in result) {\n return result;\n }\n\n if (shouldRetry(result.response.status, result.code) && attempt < MAX_RETRIES) {\n await wait(retryDelay(result.response, attempt));\n continue;\n }\n\n throw errorFromResponse(result.response, result.code, this.#apiKey);\n }\n\n throw new APIError(\n lastFailureWasTimeout ? \"API request timed out\" : \"API request failed\",\n );\n }\n\n async #attempt<T>(\n url: URL,\n responseType: \"json\" | \"text\",\n ): Promise<{ data: T; response: Response } | AttemptErrorResponse> {\n const controller = new AbortController();\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, ATTEMPT_TIMEOUT_MS);\n\n try {\n let response: Response;\n try {\n response = await this.#fetch(url, {\n headers: {\n authorization: `Bearer ${this.#apiKey}`,\n },\n method: \"GET\",\n signal: controller.signal,\n });\n } catch {\n throw new AttemptFailure(timedOut);\n }\n\n if (!response.ok) {\n return {\n code: await readErrorCode(response, this.#apiKey),\n response,\n };\n }\n\n try {\n const data =\n responseType === \"text\"\n ? await response.text()\n : await response.json();\n return { data: data as T, response };\n } catch (error) {\n if (responseType === \"json\" && error instanceof SyntaxError) {\n throw new APIError(\"API returned an invalid JSON response\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n throw new APIError(\"API returned an invalid response body\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction normalizeBaseURL(value: string) {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n if (\n (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n url.username ||\n url.password ||\n url.href !== `${url.origin}${url.pathname}`\n ) {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/`;\n return url;\n}\n\nfunction buildUrl(baseURL: URL, request: TransportRequest) {\n const path = request.path.map((segment) => encodeURIComponent(segment)).join(\"/\");\n const url = new URL(path, baseURL);\n for (const [key, value] of Object.entries(request.query ?? {})) {\n if (value === undefined || value === null) continue;\n const values = Array.isArray(value) ? value : [value];\n for (const entry of values) {\n url.searchParams.append(key, String(entry));\n }\n }\n return url;\n}\n\nasync function readErrorCode(response: Response, apiKey: string) {\n try {\n const body: unknown = await response.json();\n if (\n body !== null &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\" &&\n body.error !== apiKey &&\n SAFE_ERROR_CODE.test(body.error)\n ) {\n return body.error;\n }\n } catch {\n // A missing or malformed error body falls back to the HTTP status.\n }\n return undefined;\n}\n\nfunction shouldRetry(status: number, code: string | undefined) {\n if (code === \"billing_period_quota_exceeded\") return false;\n return (\n code === \"rate_limited\" ||\n status === 502 ||\n status === 503 ||\n status === 504\n );\n}\n\nfunction retryDelay(response: Response, retry: number) {\n const retryAfter = response.headers.get(\"retry-after\");\n if (retryAfter === null) return backoffDelay(retry);\n\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.min(seconds * 1_000, MAX_RETRY_DELAY_MS);\n }\n\n const date = Date.parse(retryAfter);\n if (!Number.isNaN(date)) {\n return Math.min(Math.max(0, date - Date.now()), MAX_RETRY_DELAY_MS);\n }\n\n return backoffDelay(retry);\n}\n\nfunction backoffDelay(retry: number) {\n return Math.min(BASE_RETRY_DELAY_MS * 2 ** retry, MAX_RETRY_DELAY_MS);\n}\n\nfunction wait(milliseconds: number) {\n return new Promise<void>((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction errorFromResponse(\n response: Response,\n code: string | undefined,\n apiKey: string,\n) {\n const suffix = code ? ` (${code})` : \"\";\n return new APIError(\n `API request failed with status ${response.status}${suffix}`,\n {\n ...(code === undefined ? {} : { code }),\n headers: safeErrorHeaders(response.headers, apiKey),\n status: response.status,\n },\n );\n}\n\nfunction safeErrorHeaders(headers: Headers, apiKey: string) {\n const safe = new Headers();\n for (const [name, value] of headers) {\n const normalizedName = name.toLowerCase();\n if (\n normalizedName === \"authorization\" ||\n normalizedName === \"cookie\" ||\n normalizedName === \"proxy-authorization\" ||\n normalizedName === \"set-cookie\" ||\n value.includes(apiKey)\n ) {\n continue;\n }\n safe.append(name, value);\n }\n return safe;\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n CompanyReportFeedFilters,\n InsiderActivityFeedFilters,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n} from \"../types\";\nimport type { JsonResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Feeds {\n readonly companyReports: CompanyReportFeed;\n readonly insiderActivity: InsiderActivityFeed;\n readonly insiderTransactions: InsiderTransactionFeed;\n readonly institutionalFilings: InstitutionalFilingFeed;\n\n constructor(transport: HttpTransport) {\n this.companyReports = new CompanyReportFeed(transport);\n this.insiderActivity = new InsiderActivityFeed(transport);\n this.insiderTransactions = new InsiderTransactionFeed(transport);\n this.institutionalFilings = new InstitutionalFilingFeed(transport);\n }\n}\n\nclass CompanyReportFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: CompanyReportFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: CompanyReportFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"company-reports\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderActivityFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderActivityFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderActivityFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-activity\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderTransactionFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderTransactionFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderTransactionFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\", \"feed\"],\n query: {\n ...mode,\n limit: filters.limit,\n transaction_codes: filters.transactionCodes?.join(\",\"),\n },\n });\n }\n}\n\nclass InstitutionalFilingFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InstitutionalFilingFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InstitutionalFilingFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n InsiderTransactionCode,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"../types\";\nimport type { JsonResponse, TextResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Companies {\n constructor(private readonly transport: HttpTransport) {}\n\n search({ query }: { query: string }): PromiseWithResponse<JsonResponse<\"searchCompanies\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", \"search\"],\n query: { query },\n });\n }\n\n get({ ticker }: { ticker: string }): PromiseWithResponse<JsonResponse<\"getCompany\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker],\n });\n }\n}\n\nexport class CompanyReports {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecCompanyReport\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"company-reports\", accessionNumber],\n });\n }\n\n getByFiscalYear({\n ticker,\n fiscalYear,\n }: {\n ticker: string;\n fiscalYear: number;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReport\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"annual\",\n String(fiscalYear),\n ],\n });\n }\n\n getHtml({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<TextResponse<\"getSecCompanyReportContent\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"company-reports\",\n accessionNumber,\n \"content.html\",\n ],\n responseType: \"text\",\n });\n }\n}\n\nexport class InsiderTransactions {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n filingDateFrom,\n filingDateUntil,\n tickers,\n transactionCodes,\n }: {\n filingDateFrom: string;\n filingDateUntil?: string;\n tickers?: string[];\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\"],\n query: {\n from: filingDateFrom,\n tickers: commaSeparated(tickers),\n transaction_codes: commaSeparated(transactionCodes),\n until: filingDateUntil,\n },\n });\n }\n\n listForCompany({\n ticker,\n filingDateFrom,\n filingDateUntil,\n transactionCodes,\n }: {\n ticker: string;\n filingDateFrom: string;\n filingDateUntil?: string;\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listCompanyInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"insider-transactions\"],\n query: {\n from: filingDateFrom,\n transaction_codes: commaSeparated(transactionCodes),\n until: filingDateUntil,\n },\n });\n }\n}\n\nexport class InsiderFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInsiderFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"insider-filings\", accessionNumber],\n });\n }\n}\n\nexport class ProposedSales {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n filingDateFrom,\n filingDateUntil,\n tickers,\n }: {\n filingDateFrom: string;\n filingDateUntil?: string;\n tickers?: string[];\n }): PromiseWithResponse<JsonResponse<\"listProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"proposed-sales\"],\n query: {\n from: filingDateFrom,\n tickers: commaSeparated(tickers),\n until: filingDateUntil,\n },\n });\n }\n\n listForCompany({\n ticker,\n filingDateFrom,\n filingDateUntil,\n }: {\n ticker: string;\n filingDateFrom: string;\n filingDateUntil?: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"proposed-sales\"],\n query: { from: filingDateFrom, until: filingDateUntil },\n });\n }\n\n getFiling({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecProposedSaleFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"proposed-sales\", accessionNumber],\n });\n }\n}\n\nexport class InstitutionalFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInstitutionalFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"institutional-filings\", accessionNumber],\n });\n }\n\n listHoldings({\n accessionNumber,\n cursor,\n limit,\n }: {\n accessionNumber: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listSecInstitutionalFilingHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"institutional-filings\",\n accessionNumber,\n \"holdings\",\n ],\n query: { cursor, limit },\n });\n }\n\n async *iterateHoldings({\n accessionNumber,\n limit,\n }: {\n accessionNumber: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n accessionNumber,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nexport class InstitutionalManagers {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n cik,\n form13fFileNumber,\n cursor,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n cursor?: string;\n limit?: number;\n } = {}): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"managers\"],\n query: {\n cik,\n cursor,\n form_13f_file_number: form13fFileNumber,\n limit,\n },\n });\n }\n\n get({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getInstitutionalHoldingManager\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n ],\n });\n }\n\n listPeriods({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerPeriods\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"periods\",\n ],\n });\n }\n\n listHoldings({\n form13fFileNumber,\n reportPeriod,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n reportPeriod: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"holdings\",\n ],\n query: { cursor, limit, period: reportPeriod },\n });\n }\n\n listPositions({\n form13fFileNumber,\n reportPeriod,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n reportPeriod: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerPositions\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"positions\",\n ],\n query: { cursor, limit, period: reportPeriod },\n });\n }\n\n async *iterate({\n cik,\n form13fFileNumber,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n limit?: number;\n } = {}): AsyncGenerator<InstitutionalManager> {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n ...(cik === undefined ? {} : { cik }),\n ...(cursor === undefined ? {} : { cursor }),\n ...(form13fFileNumber === undefined ? {} : { form13fFileNumber }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.managers;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateHoldings({\n form13fFileNumber,\n reportPeriod,\n limit,\n }: {\n form13fFileNumber: string;\n reportPeriod: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n form13fFileNumber,\n reportPeriod,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iteratePositions({\n form13fFileNumber,\n reportPeriod,\n limit,\n }: {\n form13fFileNumber: string;\n reportPeriod: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalPosition> {\n let cursor: string | undefined;\n do {\n const page = await this.listPositions({\n form13fFileNumber,\n reportPeriod,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.positions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nfunction commaSeparated(values: readonly string[] | undefined) {\n return values?.join(\",\");\n}\n","import { HttpTransport } from \"./internal/transport\";\nimport { Feeds } from \"./resources/feeds\";\nimport {\n Companies,\n CompanyReports,\n InsiderFilings,\n InsiderTransactions,\n InstitutionalFilings,\n InstitutionalManagers,\n ProposedSales,\n} from \"./resources/products\";\n\nexport interface ClientOptions {\n apiKey: string;\n baseURL?: string;\n}\n\nexport class Chadwin {\n readonly companies: Companies;\n readonly companyReports: CompanyReports;\n readonly feeds: Feeds;\n readonly insiderFilings: InsiderFilings;\n readonly insiderTransactions: InsiderTransactions;\n readonly institutionalFilings: InstitutionalFilings;\n readonly institutionalManagers: InstitutionalManagers;\n readonly proposedSales: ProposedSales;\n\n constructor(options: ClientOptions) {\n if (\n !options ||\n typeof options.apiKey !== \"string\" ||\n options.apiKey.trim().length === 0\n ) {\n throw new TypeError(\"A non-empty Chadwin API key is required\");\n }\n\n const transport = new HttpTransport({\n apiKey: options.apiKey,\n ...(options.baseURL === undefined ? {} : { baseURL: options.baseURL }),\n });\n this.companies = new Companies(transport);\n this.companyReports = new CompanyReports(transport);\n this.feeds = new Feeds(transport);\n this.insiderFilings = new InsiderFilings(transport);\n this.insiderTransactions = new InsiderTransactions(transport);\n this.institutionalFilings = new InstitutionalFilings(transport);\n this.institutionalManagers = new InstitutionalManagers(transport);\n this.proposedSales = new ProposedSales(transport);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/error.ts","../src/promise.ts","../src/internal/transport.ts","../src/resources/feeds.ts","../src/resources/products.ts","../src/client.ts"],"sourcesContent":["export { Chadwin, type ClientOptions } from \"./client\";\nexport { APIError } from \"./error\";\nexport type { PromiseWithResponse } from \"./promise\";\nexport type {\n CompanyReportFeedFilters,\n CompanyReportForm,\n InsiderActivityFeedFilters,\n InsiderActivityForm,\n InsiderTransactionCode,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n InstitutionalFilingForm,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"./types\";\n","export interface APIErrorOptions {\n status?: number;\n code?: string;\n headers?: Headers;\n}\n\nexport class APIError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly headers: Headers | undefined;\n\n constructor(message: string, options: APIErrorOptions = {}) {\n super(message);\n this.name = \"APIError\";\n this.status = options.status;\n this.code = options.code;\n this.headers = options.headers;\n }\n}\n","export interface PromiseWithResponse<T> extends Promise<T> {\n withResponse(): Promise<{ data: T; response: Response }>;\n}\n\nexport function createPromiseWithResponse<T>(\n response: Promise<{ data: T; response: Response }>,\n): PromiseWithResponse<T> {\n const promise = response.then(({ data }) => data) as PromiseWithResponse<T>;\n\n Object.defineProperty(promise, \"withResponse\", {\n value: () => response,\n });\n\n // A caller may consume only withResponse(). Mark this branch as handled while\n // preserving the original rejection for ordinary await and Promise chaining.\n void promise.catch(() => undefined);\n return promise;\n}\n","import { APIError } from \"../error\";\nimport {\n createPromiseWithResponse,\n type PromiseWithResponse,\n} from \"../promise\";\n\nexport const ATTEMPT_TIMEOUT_MS = 30_000;\nexport const MAX_RETRIES = 2;\nexport const BASE_RETRY_DELAY_MS = 250;\nexport const MAX_RETRY_DELAY_MS = 30_000;\n\nconst PRODUCTION_BASE_URL = \"https://api.chadwin.co\";\nconst INVALID_BASE_URL_MESSAGE =\n \"baseURL must be an HTTP or HTTPS URL without credentials, a query, or a fragment\";\nconst SAFE_ERROR_CODE = /^[a-z][a-z0-9_]{0,63}$/;\n\ntype QueryScalar = boolean | number | string;\n\nexport type QueryValue =\n | QueryScalar\n | readonly QueryScalar[]\n | null\n | undefined;\n\nexport interface TransportRequest {\n path: readonly string[];\n query?: Readonly<Record<string, QueryValue>>;\n responseType?: \"json\" | \"text\";\n}\n\ninterface HttpTransportOptions {\n apiKey: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\ninterface AttemptErrorResponse {\n code: string | undefined;\n response: Response;\n}\n\nclass AttemptFailure extends Error {\n constructor(readonly timedOut: boolean) {\n super(timedOut ? \"Request timed out\" : \"Network request failed\");\n }\n}\n\nexport class HttpTransport {\n readonly #apiKey: string;\n readonly #fetch: typeof fetch;\n readonly #baseURL: URL;\n\n constructor(options: HttpTransportOptions) {\n this.#apiKey = options.apiKey;\n this.#baseURL = normalizeBaseURL(options.baseURL ?? PRODUCTION_BASE_URL);\n this.#fetch = options.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n\n request<T>(request: TransportRequest): PromiseWithResponse<T> {\n return createPromiseWithResponse(this.#performRequest<T>(request));\n }\n\n async #performRequest<T>(\n request: TransportRequest,\n ): Promise<{ data: T; response: Response }> {\n const url = buildUrl(this.#baseURL, request);\n let lastFailureWasTimeout = false;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n let result: { data: T; response: Response } | AttemptErrorResponse;\n try {\n result = await this.#attempt<T>(url, request.responseType ?? \"json\");\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n if (!(error instanceof AttemptFailure)) {\n throw new APIError(\"API request failed\");\n }\n lastFailureWasTimeout = error.timedOut;\n if (attempt === MAX_RETRIES) {\n throw new APIError(\n lastFailureWasTimeout\n ? \"API request timed out\"\n : \"API request failed\",\n );\n }\n await wait(backoffDelay(attempt));\n continue;\n }\n\n if (\"data\" in result) {\n return result;\n }\n\n if (shouldRetry(result.response.status, result.code) && attempt < MAX_RETRIES) {\n await wait(retryDelay(result.response, attempt));\n continue;\n }\n\n throw errorFromResponse(result.response, result.code, this.#apiKey);\n }\n\n throw new APIError(\n lastFailureWasTimeout ? \"API request timed out\" : \"API request failed\",\n );\n }\n\n async #attempt<T>(\n url: URL,\n responseType: \"json\" | \"text\",\n ): Promise<{ data: T; response: Response } | AttemptErrorResponse> {\n const controller = new AbortController();\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, ATTEMPT_TIMEOUT_MS);\n\n try {\n let response: Response;\n try {\n response = await this.#fetch(url, {\n headers: {\n authorization: `Bearer ${this.#apiKey}`,\n },\n method: \"GET\",\n signal: controller.signal,\n });\n } catch {\n throw new AttemptFailure(timedOut);\n }\n\n if (!response.ok) {\n return {\n code: await readErrorCode(response, this.#apiKey),\n response,\n };\n }\n\n try {\n const data =\n responseType === \"text\"\n ? await response.text()\n : await response.json();\n return { data: data as T, response };\n } catch (error) {\n if (responseType === \"json\" && error instanceof SyntaxError) {\n throw new APIError(\"API returned an invalid JSON response\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n throw new APIError(\"API returned an invalid response body\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction normalizeBaseURL(value: string) {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n if (\n (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n url.username ||\n url.password ||\n url.href !== `${url.origin}${url.pathname}`\n ) {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/`;\n return url;\n}\n\nfunction buildUrl(baseURL: URL, request: TransportRequest) {\n const path = request.path.map((segment) => encodeURIComponent(segment)).join(\"/\");\n const url = new URL(path, baseURL);\n for (const [key, value] of Object.entries(request.query ?? {})) {\n if (value === undefined || value === null) continue;\n const values = Array.isArray(value) ? value : [value];\n for (const entry of values) {\n url.searchParams.append(key, String(entry));\n }\n }\n return url;\n}\n\nasync function readErrorCode(response: Response, apiKey: string) {\n try {\n const body: unknown = await response.json();\n if (\n body !== null &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\" &&\n body.error !== apiKey &&\n SAFE_ERROR_CODE.test(body.error)\n ) {\n return body.error;\n }\n } catch {\n // A missing or malformed error body falls back to the HTTP status.\n }\n return undefined;\n}\n\nfunction shouldRetry(status: number, code: string | undefined) {\n if (code === \"billing_period_quota_exceeded\") return false;\n return (\n code === \"rate_limited\" ||\n status === 502 ||\n status === 503 ||\n status === 504\n );\n}\n\nfunction retryDelay(response: Response, retry: number) {\n const retryAfter = response.headers.get(\"retry-after\");\n if (retryAfter === null) return backoffDelay(retry);\n\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.min(seconds * 1_000, MAX_RETRY_DELAY_MS);\n }\n\n const date = Date.parse(retryAfter);\n if (!Number.isNaN(date)) {\n return Math.min(Math.max(0, date - Date.now()), MAX_RETRY_DELAY_MS);\n }\n\n return backoffDelay(retry);\n}\n\nfunction backoffDelay(retry: number) {\n return Math.min(BASE_RETRY_DELAY_MS * 2 ** retry, MAX_RETRY_DELAY_MS);\n}\n\nfunction wait(milliseconds: number) {\n return new Promise<void>((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction errorFromResponse(\n response: Response,\n code: string | undefined,\n apiKey: string,\n) {\n const suffix = code ? ` (${code})` : \"\";\n return new APIError(\n `API request failed with status ${response.status}${suffix}`,\n {\n ...(code === undefined ? {} : { code }),\n headers: safeErrorHeaders(response.headers, apiKey),\n status: response.status,\n },\n );\n}\n\nfunction safeErrorHeaders(headers: Headers, apiKey: string) {\n const safe = new Headers();\n for (const [name, value] of headers) {\n const normalizedName = name.toLowerCase();\n if (\n normalizedName === \"authorization\" ||\n normalizedName === \"cookie\" ||\n normalizedName === \"proxy-authorization\" ||\n normalizedName === \"set-cookie\" ||\n value.includes(apiKey)\n ) {\n continue;\n }\n safe.append(name, value);\n }\n return safe;\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n CompanyReportFeedFilters,\n InsiderActivityFeedFilters,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n} from \"../types\";\nimport type { JsonResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Feeds {\n readonly companyReports: CompanyReportFeed;\n readonly insiderActivity: InsiderActivityFeed;\n readonly insiderTransactions: InsiderTransactionFeed;\n readonly institutionalFilings: InstitutionalFilingFeed;\n\n constructor(transport: HttpTransport) {\n this.companyReports = new CompanyReportFeed(transport);\n this.insiderActivity = new InsiderActivityFeed(transport);\n this.insiderTransactions = new InsiderTransactionFeed(transport);\n this.institutionalFilings = new InstitutionalFilingFeed(transport);\n }\n}\n\nclass CompanyReportFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: CompanyReportFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: CompanyReportFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"company-reports\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderActivityFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderActivityFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderActivityFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-activity\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderTransactionFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderTransactionFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderTransactionFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\", \"feed\"],\n query: {\n ...mode,\n limit: filters.limit,\n transaction_codes: filters.transactionCodes?.join(\",\"),\n },\n });\n }\n}\n\nclass InstitutionalFilingFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InstitutionalFilingFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InstitutionalFilingFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n InsiderTransactionCode,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"../types\";\nimport type { JsonResponse, TextResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Companies {\n constructor(private readonly transport: HttpTransport) {}\n\n search({ query }: { query: string }): PromiseWithResponse<JsonResponse<\"searchCompanies\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", \"search\"],\n query: { query },\n });\n }\n\n get({ ticker }: { ticker: string }): PromiseWithResponse<JsonResponse<\"getCompany\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker],\n });\n }\n}\n\nexport class CompanyReports {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecCompanyReport\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"company-reports\", accessionNumber],\n });\n }\n\n getByFiscalYear({\n ticker,\n fiscalYear,\n }: {\n ticker: string;\n fiscalYear: number;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReport\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"annual\",\n String(fiscalYear),\n ],\n });\n }\n\n getHtml({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<TextResponse<\"getSecCompanyReportContent\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"company-reports\",\n accessionNumber,\n \"content.html\",\n ],\n responseType: \"text\",\n });\n }\n}\n\nexport class InsiderTransactions {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n from,\n until,\n tickers,\n transactionCodes,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\"],\n query: {\n from,\n tickers: commaSeparated(tickers),\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n\n listForCompany({\n ticker,\n from,\n until,\n transactionCodes,\n }: {\n ticker: string;\n from: string;\n until?: string;\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listCompanyInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"insider-transactions\"],\n query: {\n from,\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n}\n\nexport class InsiderFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInsiderFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"insider-filings\", accessionNumber],\n });\n }\n}\n\nexport class ProposedSales {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n from,\n until,\n tickers,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n }): PromiseWithResponse<JsonResponse<\"listProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"proposed-sales\"],\n query: {\n from,\n tickers: commaSeparated(tickers),\n until,\n },\n });\n }\n\n listForCompany({\n ticker,\n from,\n until,\n }: {\n ticker: string;\n from: string;\n until?: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"proposed-sales\"],\n query: { from, until },\n });\n }\n\n getFiling({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecProposedSaleFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"proposed-sales\", accessionNumber],\n });\n }\n}\n\nexport class InstitutionalFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInstitutionalFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"institutional-filings\", accessionNumber],\n });\n }\n\n listHoldings({\n accessionNumber,\n cursor,\n limit,\n }: {\n accessionNumber: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listSecInstitutionalFilingHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"institutional-filings\",\n accessionNumber,\n \"holdings\",\n ],\n query: { cursor, limit },\n });\n }\n\n async *iterateHoldings({\n accessionNumber,\n limit,\n }: {\n accessionNumber: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n accessionNumber,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nexport class InstitutionalManagers {\n constructor(private readonly transport: HttpTransport) {}\n\n search({\n query,\n }: {\n query: string;\n }): PromiseWithResponse<JsonResponse<\"searchInstitutionalHoldingManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"managers\", \"search\"],\n query: { query },\n });\n }\n\n list({\n cik,\n form13fFileNumber,\n cursor,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n cursor?: string;\n limit?: number;\n } = {}): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"managers\"],\n query: {\n cik,\n cursor,\n form_13f_file_number: form13fFileNumber,\n limit,\n },\n });\n }\n\n get({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getInstitutionalHoldingManager\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n ],\n });\n }\n\n listPeriods({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerPeriods\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"periods\",\n ],\n });\n }\n\n listHoldings({\n form13fFileNumber,\n period,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"holdings\",\n ],\n query: { cursor, limit, period },\n });\n }\n\n listPositions({\n form13fFileNumber,\n period,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerPositions\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"positions\",\n ],\n query: { cursor, limit, period },\n });\n }\n\n async *iterateManagers({\n cik,\n form13fFileNumber,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n limit?: number;\n } = {}): AsyncGenerator<InstitutionalManager> {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n ...(cik === undefined ? {} : { cik }),\n ...(cursor === undefined ? {} : { cursor }),\n ...(form13fFileNumber === undefined ? {} : { form13fFileNumber }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.managers;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateHoldings({\n form13fFileNumber,\n period,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n form13fFileNumber,\n period,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iteratePositions({\n form13fFileNumber,\n period,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalPosition> {\n let cursor: string | undefined;\n do {\n const page = await this.listPositions({\n form13fFileNumber,\n period,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.positions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nfunction commaSeparated(values: readonly string[] | undefined) {\n return values?.join(\",\");\n}\n","import { HttpTransport } from \"./internal/transport\";\nimport { Feeds } from \"./resources/feeds\";\nimport {\n Companies,\n CompanyReports,\n InsiderFilings,\n InsiderTransactions,\n InstitutionalFilings,\n InstitutionalManagers,\n ProposedSales,\n} from \"./resources/products\";\n\nexport interface ClientOptions {\n apiKey: string;\n baseURL?: string;\n}\n\nexport class Chadwin {\n readonly companies: Companies;\n readonly companyReports: CompanyReports;\n readonly feeds: Feeds;\n readonly insiderFilings: InsiderFilings;\n readonly insiderTransactions: InsiderTransactions;\n readonly institutionalFilings: InstitutionalFilings;\n readonly institutionalManagers: InstitutionalManagers;\n readonly proposedSales: ProposedSales;\n\n constructor(options: ClientOptions) {\n if (\n !options ||\n typeof options.apiKey !== \"string\" ||\n options.apiKey.trim().length === 0\n ) {\n throw new TypeError(\"A non-empty Chadwin API key is required\");\n }\n\n const transport = new HttpTransport({\n apiKey: options.apiKey,\n ...(options.baseURL === undefined ? {} : { baseURL: options.baseURL }),\n });\n this.companies = new Companies(transport);\n this.companyReports = new CompanyReports(transport);\n this.feeds = new Feeds(transport);\n this.insiderFilings = new InsiderFilings(transport);\n this.insiderTransactions = new InsiderTransactions(transport);\n this.institutionalFilings = new InstitutionalFilings(transport);\n this.institutionalManagers = new InstitutionalManagers(transport);\n this.proposedSales = new ProposedSales(transport);\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -148,7 +148,7 @@ interface components {
|
|
|
148
148
|
fiscal_year_end: string | null;
|
|
149
149
|
listings: {
|
|
150
150
|
/** @description Source exchange label. */
|
|
151
|
-
exchange: string;
|
|
151
|
+
exchange: string | null;
|
|
152
152
|
/** @enum {boolean} */
|
|
153
153
|
is_current: true;
|
|
154
154
|
share_class_figi: string | null;
|
|
@@ -803,7 +803,7 @@ interface components {
|
|
|
803
803
|
/** @example 0000320193 */
|
|
804
804
|
cik: string;
|
|
805
805
|
/** @example NASDAQ */
|
|
806
|
-
exchange: string;
|
|
806
|
+
exchange: string | null;
|
|
807
807
|
/** @example Apple Inc. */
|
|
808
808
|
name: string;
|
|
809
809
|
/** @example AAPL */
|
|
@@ -1032,6 +1032,16 @@ interface components {
|
|
|
1032
1032
|
};
|
|
1033
1033
|
positions: components["schemas"]["InstitutionalManagerPosition"][];
|
|
1034
1034
|
};
|
|
1035
|
+
InstitutionalManagerSearchBadRequestResponse: {
|
|
1036
|
+
/**
|
|
1037
|
+
* @example invalid_query
|
|
1038
|
+
* @enum {string}
|
|
1039
|
+
*/
|
|
1040
|
+
error: "invalid_query" | "invalid_query_parameters";
|
|
1041
|
+
};
|
|
1042
|
+
InstitutionalManagerSearchResponse: {
|
|
1043
|
+
managers: components["schemas"]["InstitutionalManagerListItem"][];
|
|
1044
|
+
};
|
|
1035
1045
|
InstitutionalManagerSourceIdentity: {
|
|
1036
1046
|
/**
|
|
1037
1047
|
* @description SEC CIK of the reporting manager's source filer.
|
|
@@ -1239,7 +1249,7 @@ interface operations {
|
|
|
1239
1249
|
* "ticker": "IBM"
|
|
1240
1250
|
* }
|
|
1241
1251
|
* ],
|
|
1242
|
-
* "name": "
|
|
1252
|
+
* "name": "International Business Machines Corporation",
|
|
1243
1253
|
* "sic": {
|
|
1244
1254
|
* "code": "3570",
|
|
1245
1255
|
* "industry_title": "COMPUTER & OFFICE EQUIPMENT",
|
|
@@ -1346,7 +1356,7 @@ interface operations {
|
|
|
1346
1356
|
* "ticker": "IBM"
|
|
1347
1357
|
* }
|
|
1348
1358
|
* ],
|
|
1349
|
-
* "name": "
|
|
1359
|
+
* "name": "International Business Machines Corporation",
|
|
1350
1360
|
* "sic": {
|
|
1351
1361
|
* "code": "3570",
|
|
1352
1362
|
* "industry_title": "COMPUTER & OFFICE EQUIPMENT",
|
|
@@ -2105,7 +2115,7 @@ interface operations {
|
|
|
2105
2115
|
from: string;
|
|
2106
2116
|
/** @description Optional inclusive SEC filing-date upper bound in YYYY-MM-DD format. Defaults to the current date. If the filing-date window matches more than 1000 rows, narrow the window. */
|
|
2107
2117
|
until?: string;
|
|
2108
|
-
/** @description Optional comma-separated US listed ticker filter.
|
|
2118
|
+
/** @description Optional comma-separated US listed ticker filter. */
|
|
2109
2119
|
tickers?: string;
|
|
2110
2120
|
};
|
|
2111
2121
|
header?: never;
|
|
@@ -2576,6 +2586,99 @@ interface operations {
|
|
|
2576
2586
|
};
|
|
2577
2587
|
};
|
|
2578
2588
|
};
|
|
2589
|
+
searchInstitutionalHoldingManagers: {
|
|
2590
|
+
parameters: {
|
|
2591
|
+
query: {
|
|
2592
|
+
/** @description Manager name, current source-filer name, Form 13F file number, or padded or unpadded CIK. */
|
|
2593
|
+
query: string;
|
|
2594
|
+
};
|
|
2595
|
+
header?: never;
|
|
2596
|
+
path?: never;
|
|
2597
|
+
cookie?: never;
|
|
2598
|
+
};
|
|
2599
|
+
requestBody?: never;
|
|
2600
|
+
responses: {
|
|
2601
|
+
/** @description Ranked institutional manager profiles. */
|
|
2602
|
+
200: {
|
|
2603
|
+
headers: {
|
|
2604
|
+
"Cache-Control"?: string;
|
|
2605
|
+
"X-Billing-Period-Quota-Limit"?: string;
|
|
2606
|
+
"X-Billing-Period-Quota-Remaining"?: string;
|
|
2607
|
+
"X-Billing-Period-Quota-Reset"?: string;
|
|
2608
|
+
[name: string]: unknown;
|
|
2609
|
+
};
|
|
2610
|
+
content: {
|
|
2611
|
+
/**
|
|
2612
|
+
* @example {
|
|
2613
|
+
* "managers": [
|
|
2614
|
+
* {
|
|
2615
|
+
* "cik": "0001067983",
|
|
2616
|
+
* "form_13f_file_number": "028-04545",
|
|
2617
|
+
* "holding_count": 124,
|
|
2618
|
+
* "latest_accepted_at": "2026-05-15T20:12:34.000Z",
|
|
2619
|
+
* "latest_period_of_report": "2026-03-31",
|
|
2620
|
+
* "name": "Berkshire Hathaway Inc.",
|
|
2621
|
+
* "total_value_usd": "267891234567"
|
|
2622
|
+
* }
|
|
2623
|
+
* ]
|
|
2624
|
+
* }
|
|
2625
|
+
*/
|
|
2626
|
+
"application/json": components["schemas"]["InstitutionalManagerSearchResponse"];
|
|
2627
|
+
};
|
|
2628
|
+
};
|
|
2629
|
+
/** @description The query is missing, invalid, or has unsupported keys. */
|
|
2630
|
+
400: {
|
|
2631
|
+
headers: {
|
|
2632
|
+
[name: string]: unknown;
|
|
2633
|
+
};
|
|
2634
|
+
content: {
|
|
2635
|
+
"application/json": components["schemas"]["InstitutionalManagerSearchBadRequestResponse"];
|
|
2636
|
+
};
|
|
2637
|
+
};
|
|
2638
|
+
/** @description The request is missing a valid Chadwin API key. */
|
|
2639
|
+
401: {
|
|
2640
|
+
headers: {
|
|
2641
|
+
[name: string]: unknown;
|
|
2642
|
+
};
|
|
2643
|
+
content: {
|
|
2644
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2645
|
+
};
|
|
2646
|
+
};
|
|
2647
|
+
/** @description The subscription does not include this dataset. */
|
|
2648
|
+
403: {
|
|
2649
|
+
headers: {
|
|
2650
|
+
[name: string]: unknown;
|
|
2651
|
+
};
|
|
2652
|
+
content: {
|
|
2653
|
+
"application/json": components["schemas"]["DatasetNotEntitledErrorResponse"];
|
|
2654
|
+
};
|
|
2655
|
+
};
|
|
2656
|
+
/** @description The request exceeded a rate limit. */
|
|
2657
|
+
429: {
|
|
2658
|
+
headers: {
|
|
2659
|
+
"RateLimit-Limit"?: string;
|
|
2660
|
+
"RateLimit-Reset"?: string;
|
|
2661
|
+
"Retry-After"?: string;
|
|
2662
|
+
"X-Billing-Period-Quota-Limit"?: string;
|
|
2663
|
+
"X-Billing-Period-Quota-Remaining"?: string;
|
|
2664
|
+
"X-Billing-Period-Quota-Reset"?: string;
|
|
2665
|
+
[name: string]: unknown;
|
|
2666
|
+
};
|
|
2667
|
+
content: {
|
|
2668
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2669
|
+
};
|
|
2670
|
+
};
|
|
2671
|
+
/** @description The database is unavailable. */
|
|
2672
|
+
503: {
|
|
2673
|
+
headers: {
|
|
2674
|
+
[name: string]: unknown;
|
|
2675
|
+
};
|
|
2676
|
+
content: {
|
|
2677
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2678
|
+
};
|
|
2679
|
+
};
|
|
2680
|
+
};
|
|
2681
|
+
};
|
|
2579
2682
|
getInstitutionalHoldingManager: {
|
|
2580
2683
|
parameters: {
|
|
2581
2684
|
query?: never;
|
|
@@ -3302,7 +3405,7 @@ interface operations {
|
|
|
3302
3405
|
};
|
|
3303
3406
|
requestBody?: never;
|
|
3304
3407
|
responses: {
|
|
3305
|
-
/** @description
|
|
3408
|
+
/** @description Company report HTML */
|
|
3306
3409
|
200: {
|
|
3307
3410
|
headers: {
|
|
3308
3411
|
"Cache-Control"?: string;
|
|
@@ -4133,16 +4236,16 @@ declare class CompanyReports {
|
|
|
4133
4236
|
declare class InsiderTransactions {
|
|
4134
4237
|
private readonly transport;
|
|
4135
4238
|
constructor(transport: HttpTransport);
|
|
4136
|
-
list({
|
|
4137
|
-
|
|
4138
|
-
|
|
4239
|
+
list({ from, until, tickers, transactionCodes, }: {
|
|
4240
|
+
from: string;
|
|
4241
|
+
until?: string;
|
|
4139
4242
|
tickers?: string[];
|
|
4140
4243
|
transactionCodes?: InsiderTransactionCode[];
|
|
4141
4244
|
}): PromiseWithResponse<JsonResponse<"listInsiderTransactions">>;
|
|
4142
|
-
listForCompany({ ticker,
|
|
4245
|
+
listForCompany({ ticker, from, until, transactionCodes, }: {
|
|
4143
4246
|
ticker: string;
|
|
4144
|
-
|
|
4145
|
-
|
|
4247
|
+
from: string;
|
|
4248
|
+
until?: string;
|
|
4146
4249
|
transactionCodes?: InsiderTransactionCode[];
|
|
4147
4250
|
}): PromiseWithResponse<JsonResponse<"listCompanyInsiderTransactions">>;
|
|
4148
4251
|
}
|
|
@@ -4156,15 +4259,15 @@ declare class InsiderFilings {
|
|
|
4156
4259
|
declare class ProposedSales {
|
|
4157
4260
|
private readonly transport;
|
|
4158
4261
|
constructor(transport: HttpTransport);
|
|
4159
|
-
list({
|
|
4160
|
-
|
|
4161
|
-
|
|
4262
|
+
list({ from, until, tickers, }: {
|
|
4263
|
+
from: string;
|
|
4264
|
+
until?: string;
|
|
4162
4265
|
tickers?: string[];
|
|
4163
4266
|
}): PromiseWithResponse<JsonResponse<"listProposedSales">>;
|
|
4164
|
-
listForCompany({ ticker,
|
|
4267
|
+
listForCompany({ ticker, from, until, }: {
|
|
4165
4268
|
ticker: string;
|
|
4166
|
-
|
|
4167
|
-
|
|
4269
|
+
from: string;
|
|
4270
|
+
until?: string;
|
|
4168
4271
|
}): PromiseWithResponse<JsonResponse<"listCompanyProposedSales">>;
|
|
4169
4272
|
getFiling({ accessionNumber, }: {
|
|
4170
4273
|
accessionNumber: string;
|
|
@@ -4189,6 +4292,9 @@ declare class InstitutionalFilings {
|
|
|
4189
4292
|
declare class InstitutionalManagers {
|
|
4190
4293
|
private readonly transport;
|
|
4191
4294
|
constructor(transport: HttpTransport);
|
|
4295
|
+
search({ query, }: {
|
|
4296
|
+
query: string;
|
|
4297
|
+
}): PromiseWithResponse<JsonResponse<"searchInstitutionalHoldingManagers">>;
|
|
4192
4298
|
list({ cik, form13fFileNumber, cursor, limit, }?: {
|
|
4193
4299
|
cik?: string;
|
|
4194
4300
|
form13fFileNumber?: string;
|
|
@@ -4201,31 +4307,31 @@ declare class InstitutionalManagers {
|
|
|
4201
4307
|
listPeriods({ form13fFileNumber, }: {
|
|
4202
4308
|
form13fFileNumber: string;
|
|
4203
4309
|
}): PromiseWithResponse<JsonResponse<"listInstitutionalHoldingManagerPeriods">>;
|
|
4204
|
-
listHoldings({ form13fFileNumber,
|
|
4310
|
+
listHoldings({ form13fFileNumber, period, cursor, limit, }: {
|
|
4205
4311
|
form13fFileNumber: string;
|
|
4206
|
-
|
|
4312
|
+
period: string;
|
|
4207
4313
|
cursor?: string;
|
|
4208
4314
|
limit?: number;
|
|
4209
4315
|
}): PromiseWithResponse<JsonResponse<"listInstitutionalHoldingManagerHoldings">>;
|
|
4210
|
-
listPositions({ form13fFileNumber,
|
|
4316
|
+
listPositions({ form13fFileNumber, period, cursor, limit, }: {
|
|
4211
4317
|
form13fFileNumber: string;
|
|
4212
|
-
|
|
4318
|
+
period: string;
|
|
4213
4319
|
cursor?: string;
|
|
4214
4320
|
limit?: number;
|
|
4215
4321
|
}): PromiseWithResponse<JsonResponse<"listInstitutionalHoldingManagerPositions">>;
|
|
4216
|
-
|
|
4322
|
+
iterateManagers({ cik, form13fFileNumber, limit, }?: {
|
|
4217
4323
|
cik?: string;
|
|
4218
4324
|
form13fFileNumber?: string;
|
|
4219
4325
|
limit?: number;
|
|
4220
4326
|
}): AsyncGenerator<InstitutionalManager>;
|
|
4221
|
-
iterateHoldings({ form13fFileNumber,
|
|
4327
|
+
iterateHoldings({ form13fFileNumber, period, limit, }: {
|
|
4222
4328
|
form13fFileNumber: string;
|
|
4223
|
-
|
|
4329
|
+
period: string;
|
|
4224
4330
|
limit?: number;
|
|
4225
4331
|
}): AsyncGenerator<InstitutionalHolding>;
|
|
4226
|
-
iteratePositions({ form13fFileNumber,
|
|
4332
|
+
iteratePositions({ form13fFileNumber, period, limit, }: {
|
|
4227
4333
|
form13fFileNumber: string;
|
|
4228
|
-
|
|
4334
|
+
period: string;
|
|
4229
4335
|
limit?: number;
|
|
4230
4336
|
}): AsyncGenerator<InstitutionalPosition>;
|
|
4231
4337
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -148,7 +148,7 @@ interface components {
|
|
|
148
148
|
fiscal_year_end: string | null;
|
|
149
149
|
listings: {
|
|
150
150
|
/** @description Source exchange label. */
|
|
151
|
-
exchange: string;
|
|
151
|
+
exchange: string | null;
|
|
152
152
|
/** @enum {boolean} */
|
|
153
153
|
is_current: true;
|
|
154
154
|
share_class_figi: string | null;
|
|
@@ -803,7 +803,7 @@ interface components {
|
|
|
803
803
|
/** @example 0000320193 */
|
|
804
804
|
cik: string;
|
|
805
805
|
/** @example NASDAQ */
|
|
806
|
-
exchange: string;
|
|
806
|
+
exchange: string | null;
|
|
807
807
|
/** @example Apple Inc. */
|
|
808
808
|
name: string;
|
|
809
809
|
/** @example AAPL */
|
|
@@ -1032,6 +1032,16 @@ interface components {
|
|
|
1032
1032
|
};
|
|
1033
1033
|
positions: components["schemas"]["InstitutionalManagerPosition"][];
|
|
1034
1034
|
};
|
|
1035
|
+
InstitutionalManagerSearchBadRequestResponse: {
|
|
1036
|
+
/**
|
|
1037
|
+
* @example invalid_query
|
|
1038
|
+
* @enum {string}
|
|
1039
|
+
*/
|
|
1040
|
+
error: "invalid_query" | "invalid_query_parameters";
|
|
1041
|
+
};
|
|
1042
|
+
InstitutionalManagerSearchResponse: {
|
|
1043
|
+
managers: components["schemas"]["InstitutionalManagerListItem"][];
|
|
1044
|
+
};
|
|
1035
1045
|
InstitutionalManagerSourceIdentity: {
|
|
1036
1046
|
/**
|
|
1037
1047
|
* @description SEC CIK of the reporting manager's source filer.
|
|
@@ -1239,7 +1249,7 @@ interface operations {
|
|
|
1239
1249
|
* "ticker": "IBM"
|
|
1240
1250
|
* }
|
|
1241
1251
|
* ],
|
|
1242
|
-
* "name": "
|
|
1252
|
+
* "name": "International Business Machines Corporation",
|
|
1243
1253
|
* "sic": {
|
|
1244
1254
|
* "code": "3570",
|
|
1245
1255
|
* "industry_title": "COMPUTER & OFFICE EQUIPMENT",
|
|
@@ -1346,7 +1356,7 @@ interface operations {
|
|
|
1346
1356
|
* "ticker": "IBM"
|
|
1347
1357
|
* }
|
|
1348
1358
|
* ],
|
|
1349
|
-
* "name": "
|
|
1359
|
+
* "name": "International Business Machines Corporation",
|
|
1350
1360
|
* "sic": {
|
|
1351
1361
|
* "code": "3570",
|
|
1352
1362
|
* "industry_title": "COMPUTER & OFFICE EQUIPMENT",
|
|
@@ -2105,7 +2115,7 @@ interface operations {
|
|
|
2105
2115
|
from: string;
|
|
2106
2116
|
/** @description Optional inclusive SEC filing-date upper bound in YYYY-MM-DD format. Defaults to the current date. If the filing-date window matches more than 1000 rows, narrow the window. */
|
|
2107
2117
|
until?: string;
|
|
2108
|
-
/** @description Optional comma-separated US listed ticker filter.
|
|
2118
|
+
/** @description Optional comma-separated US listed ticker filter. */
|
|
2109
2119
|
tickers?: string;
|
|
2110
2120
|
};
|
|
2111
2121
|
header?: never;
|
|
@@ -2576,6 +2586,99 @@ interface operations {
|
|
|
2576
2586
|
};
|
|
2577
2587
|
};
|
|
2578
2588
|
};
|
|
2589
|
+
searchInstitutionalHoldingManagers: {
|
|
2590
|
+
parameters: {
|
|
2591
|
+
query: {
|
|
2592
|
+
/** @description Manager name, current source-filer name, Form 13F file number, or padded or unpadded CIK. */
|
|
2593
|
+
query: string;
|
|
2594
|
+
};
|
|
2595
|
+
header?: never;
|
|
2596
|
+
path?: never;
|
|
2597
|
+
cookie?: never;
|
|
2598
|
+
};
|
|
2599
|
+
requestBody?: never;
|
|
2600
|
+
responses: {
|
|
2601
|
+
/** @description Ranked institutional manager profiles. */
|
|
2602
|
+
200: {
|
|
2603
|
+
headers: {
|
|
2604
|
+
"Cache-Control"?: string;
|
|
2605
|
+
"X-Billing-Period-Quota-Limit"?: string;
|
|
2606
|
+
"X-Billing-Period-Quota-Remaining"?: string;
|
|
2607
|
+
"X-Billing-Period-Quota-Reset"?: string;
|
|
2608
|
+
[name: string]: unknown;
|
|
2609
|
+
};
|
|
2610
|
+
content: {
|
|
2611
|
+
/**
|
|
2612
|
+
* @example {
|
|
2613
|
+
* "managers": [
|
|
2614
|
+
* {
|
|
2615
|
+
* "cik": "0001067983",
|
|
2616
|
+
* "form_13f_file_number": "028-04545",
|
|
2617
|
+
* "holding_count": 124,
|
|
2618
|
+
* "latest_accepted_at": "2026-05-15T20:12:34.000Z",
|
|
2619
|
+
* "latest_period_of_report": "2026-03-31",
|
|
2620
|
+
* "name": "Berkshire Hathaway Inc.",
|
|
2621
|
+
* "total_value_usd": "267891234567"
|
|
2622
|
+
* }
|
|
2623
|
+
* ]
|
|
2624
|
+
* }
|
|
2625
|
+
*/
|
|
2626
|
+
"application/json": components["schemas"]["InstitutionalManagerSearchResponse"];
|
|
2627
|
+
};
|
|
2628
|
+
};
|
|
2629
|
+
/** @description The query is missing, invalid, or has unsupported keys. */
|
|
2630
|
+
400: {
|
|
2631
|
+
headers: {
|
|
2632
|
+
[name: string]: unknown;
|
|
2633
|
+
};
|
|
2634
|
+
content: {
|
|
2635
|
+
"application/json": components["schemas"]["InstitutionalManagerSearchBadRequestResponse"];
|
|
2636
|
+
};
|
|
2637
|
+
};
|
|
2638
|
+
/** @description The request is missing a valid Chadwin API key. */
|
|
2639
|
+
401: {
|
|
2640
|
+
headers: {
|
|
2641
|
+
[name: string]: unknown;
|
|
2642
|
+
};
|
|
2643
|
+
content: {
|
|
2644
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2645
|
+
};
|
|
2646
|
+
};
|
|
2647
|
+
/** @description The subscription does not include this dataset. */
|
|
2648
|
+
403: {
|
|
2649
|
+
headers: {
|
|
2650
|
+
[name: string]: unknown;
|
|
2651
|
+
};
|
|
2652
|
+
content: {
|
|
2653
|
+
"application/json": components["schemas"]["DatasetNotEntitledErrorResponse"];
|
|
2654
|
+
};
|
|
2655
|
+
};
|
|
2656
|
+
/** @description The request exceeded a rate limit. */
|
|
2657
|
+
429: {
|
|
2658
|
+
headers: {
|
|
2659
|
+
"RateLimit-Limit"?: string;
|
|
2660
|
+
"RateLimit-Reset"?: string;
|
|
2661
|
+
"Retry-After"?: string;
|
|
2662
|
+
"X-Billing-Period-Quota-Limit"?: string;
|
|
2663
|
+
"X-Billing-Period-Quota-Remaining"?: string;
|
|
2664
|
+
"X-Billing-Period-Quota-Reset"?: string;
|
|
2665
|
+
[name: string]: unknown;
|
|
2666
|
+
};
|
|
2667
|
+
content: {
|
|
2668
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2669
|
+
};
|
|
2670
|
+
};
|
|
2671
|
+
/** @description The database is unavailable. */
|
|
2672
|
+
503: {
|
|
2673
|
+
headers: {
|
|
2674
|
+
[name: string]: unknown;
|
|
2675
|
+
};
|
|
2676
|
+
content: {
|
|
2677
|
+
"application/json": components["schemas"]["ErrorResponse"];
|
|
2678
|
+
};
|
|
2679
|
+
};
|
|
2680
|
+
};
|
|
2681
|
+
};
|
|
2579
2682
|
getInstitutionalHoldingManager: {
|
|
2580
2683
|
parameters: {
|
|
2581
2684
|
query?: never;
|
|
@@ -3302,7 +3405,7 @@ interface operations {
|
|
|
3302
3405
|
};
|
|
3303
3406
|
requestBody?: never;
|
|
3304
3407
|
responses: {
|
|
3305
|
-
/** @description
|
|
3408
|
+
/** @description Company report HTML */
|
|
3306
3409
|
200: {
|
|
3307
3410
|
headers: {
|
|
3308
3411
|
"Cache-Control"?: string;
|
|
@@ -4133,16 +4236,16 @@ declare class CompanyReports {
|
|
|
4133
4236
|
declare class InsiderTransactions {
|
|
4134
4237
|
private readonly transport;
|
|
4135
4238
|
constructor(transport: HttpTransport);
|
|
4136
|
-
list({
|
|
4137
|
-
|
|
4138
|
-
|
|
4239
|
+
list({ from, until, tickers, transactionCodes, }: {
|
|
4240
|
+
from: string;
|
|
4241
|
+
until?: string;
|
|
4139
4242
|
tickers?: string[];
|
|
4140
4243
|
transactionCodes?: InsiderTransactionCode[];
|
|
4141
4244
|
}): PromiseWithResponse<JsonResponse<"listInsiderTransactions">>;
|
|
4142
|
-
listForCompany({ ticker,
|
|
4245
|
+
listForCompany({ ticker, from, until, transactionCodes, }: {
|
|
4143
4246
|
ticker: string;
|
|
4144
|
-
|
|
4145
|
-
|
|
4247
|
+
from: string;
|
|
4248
|
+
until?: string;
|
|
4146
4249
|
transactionCodes?: InsiderTransactionCode[];
|
|
4147
4250
|
}): PromiseWithResponse<JsonResponse<"listCompanyInsiderTransactions">>;
|
|
4148
4251
|
}
|
|
@@ -4156,15 +4259,15 @@ declare class InsiderFilings {
|
|
|
4156
4259
|
declare class ProposedSales {
|
|
4157
4260
|
private readonly transport;
|
|
4158
4261
|
constructor(transport: HttpTransport);
|
|
4159
|
-
list({
|
|
4160
|
-
|
|
4161
|
-
|
|
4262
|
+
list({ from, until, tickers, }: {
|
|
4263
|
+
from: string;
|
|
4264
|
+
until?: string;
|
|
4162
4265
|
tickers?: string[];
|
|
4163
4266
|
}): PromiseWithResponse<JsonResponse<"listProposedSales">>;
|
|
4164
|
-
listForCompany({ ticker,
|
|
4267
|
+
listForCompany({ ticker, from, until, }: {
|
|
4165
4268
|
ticker: string;
|
|
4166
|
-
|
|
4167
|
-
|
|
4269
|
+
from: string;
|
|
4270
|
+
until?: string;
|
|
4168
4271
|
}): PromiseWithResponse<JsonResponse<"listCompanyProposedSales">>;
|
|
4169
4272
|
getFiling({ accessionNumber, }: {
|
|
4170
4273
|
accessionNumber: string;
|
|
@@ -4189,6 +4292,9 @@ declare class InstitutionalFilings {
|
|
|
4189
4292
|
declare class InstitutionalManagers {
|
|
4190
4293
|
private readonly transport;
|
|
4191
4294
|
constructor(transport: HttpTransport);
|
|
4295
|
+
search({ query, }: {
|
|
4296
|
+
query: string;
|
|
4297
|
+
}): PromiseWithResponse<JsonResponse<"searchInstitutionalHoldingManagers">>;
|
|
4192
4298
|
list({ cik, form13fFileNumber, cursor, limit, }?: {
|
|
4193
4299
|
cik?: string;
|
|
4194
4300
|
form13fFileNumber?: string;
|
|
@@ -4201,31 +4307,31 @@ declare class InstitutionalManagers {
|
|
|
4201
4307
|
listPeriods({ form13fFileNumber, }: {
|
|
4202
4308
|
form13fFileNumber: string;
|
|
4203
4309
|
}): PromiseWithResponse<JsonResponse<"listInstitutionalHoldingManagerPeriods">>;
|
|
4204
|
-
listHoldings({ form13fFileNumber,
|
|
4310
|
+
listHoldings({ form13fFileNumber, period, cursor, limit, }: {
|
|
4205
4311
|
form13fFileNumber: string;
|
|
4206
|
-
|
|
4312
|
+
period: string;
|
|
4207
4313
|
cursor?: string;
|
|
4208
4314
|
limit?: number;
|
|
4209
4315
|
}): PromiseWithResponse<JsonResponse<"listInstitutionalHoldingManagerHoldings">>;
|
|
4210
|
-
listPositions({ form13fFileNumber,
|
|
4316
|
+
listPositions({ form13fFileNumber, period, cursor, limit, }: {
|
|
4211
4317
|
form13fFileNumber: string;
|
|
4212
|
-
|
|
4318
|
+
period: string;
|
|
4213
4319
|
cursor?: string;
|
|
4214
4320
|
limit?: number;
|
|
4215
4321
|
}): PromiseWithResponse<JsonResponse<"listInstitutionalHoldingManagerPositions">>;
|
|
4216
|
-
|
|
4322
|
+
iterateManagers({ cik, form13fFileNumber, limit, }?: {
|
|
4217
4323
|
cik?: string;
|
|
4218
4324
|
form13fFileNumber?: string;
|
|
4219
4325
|
limit?: number;
|
|
4220
4326
|
}): AsyncGenerator<InstitutionalManager>;
|
|
4221
|
-
iterateHoldings({ form13fFileNumber,
|
|
4327
|
+
iterateHoldings({ form13fFileNumber, period, limit, }: {
|
|
4222
4328
|
form13fFileNumber: string;
|
|
4223
|
-
|
|
4329
|
+
period: string;
|
|
4224
4330
|
limit?: number;
|
|
4225
4331
|
}): AsyncGenerator<InstitutionalHolding>;
|
|
4226
|
-
iteratePositions({ form13fFileNumber,
|
|
4332
|
+
iteratePositions({ form13fFileNumber, period, limit, }: {
|
|
4227
4333
|
form13fFileNumber: string;
|
|
4228
|
-
|
|
4334
|
+
period: string;
|
|
4229
4335
|
limit?: number;
|
|
4230
4336
|
}): AsyncGenerator<InstitutionalPosition>;
|
|
4231
4337
|
}
|
package/dist/index.js
CHANGED
|
@@ -405,33 +405,33 @@ var InsiderTransactions = class {
|
|
|
405
405
|
}
|
|
406
406
|
transport;
|
|
407
407
|
list({
|
|
408
|
-
|
|
409
|
-
|
|
408
|
+
from,
|
|
409
|
+
until,
|
|
410
410
|
tickers,
|
|
411
411
|
transactionCodes
|
|
412
412
|
}) {
|
|
413
413
|
return this.transport.request({
|
|
414
414
|
path: ["v1", "insider-transactions"],
|
|
415
415
|
query: {
|
|
416
|
-
from
|
|
416
|
+
from,
|
|
417
417
|
tickers: commaSeparated(tickers),
|
|
418
418
|
transaction_codes: commaSeparated(transactionCodes),
|
|
419
|
-
until
|
|
419
|
+
until
|
|
420
420
|
}
|
|
421
421
|
});
|
|
422
422
|
}
|
|
423
423
|
listForCompany({
|
|
424
424
|
ticker,
|
|
425
|
-
|
|
426
|
-
|
|
425
|
+
from,
|
|
426
|
+
until,
|
|
427
427
|
transactionCodes
|
|
428
428
|
}) {
|
|
429
429
|
return this.transport.request({
|
|
430
430
|
path: ["v1", "companies", "US", ticker, "insider-transactions"],
|
|
431
431
|
query: {
|
|
432
|
-
from
|
|
432
|
+
from,
|
|
433
433
|
transaction_codes: commaSeparated(transactionCodes),
|
|
434
|
-
until
|
|
434
|
+
until
|
|
435
435
|
}
|
|
436
436
|
});
|
|
437
437
|
}
|
|
@@ -455,27 +455,27 @@ var ProposedSales = class {
|
|
|
455
455
|
}
|
|
456
456
|
transport;
|
|
457
457
|
list({
|
|
458
|
-
|
|
459
|
-
|
|
458
|
+
from,
|
|
459
|
+
until,
|
|
460
460
|
tickers
|
|
461
461
|
}) {
|
|
462
462
|
return this.transport.request({
|
|
463
463
|
path: ["v1", "proposed-sales"],
|
|
464
464
|
query: {
|
|
465
|
-
from
|
|
465
|
+
from,
|
|
466
466
|
tickers: commaSeparated(tickers),
|
|
467
|
-
until
|
|
467
|
+
until
|
|
468
468
|
}
|
|
469
469
|
});
|
|
470
470
|
}
|
|
471
471
|
listForCompany({
|
|
472
472
|
ticker,
|
|
473
|
-
|
|
474
|
-
|
|
473
|
+
from,
|
|
474
|
+
until
|
|
475
475
|
}) {
|
|
476
476
|
return this.transport.request({
|
|
477
477
|
path: ["v1", "companies", "US", ticker, "proposed-sales"],
|
|
478
|
-
query: { from
|
|
478
|
+
query: { from, until }
|
|
479
479
|
});
|
|
480
480
|
}
|
|
481
481
|
getFiling({
|
|
@@ -535,6 +535,14 @@ var InstitutionalManagers = class {
|
|
|
535
535
|
this.transport = transport;
|
|
536
536
|
}
|
|
537
537
|
transport;
|
|
538
|
+
search({
|
|
539
|
+
query
|
|
540
|
+
}) {
|
|
541
|
+
return this.transport.request({
|
|
542
|
+
path: ["v1", "institutional-holdings", "managers", "search"],
|
|
543
|
+
query: { query }
|
|
544
|
+
});
|
|
545
|
+
}
|
|
538
546
|
list({
|
|
539
547
|
cik,
|
|
540
548
|
form13fFileNumber,
|
|
@@ -578,7 +586,7 @@ var InstitutionalManagers = class {
|
|
|
578
586
|
}
|
|
579
587
|
listHoldings({
|
|
580
588
|
form13fFileNumber,
|
|
581
|
-
|
|
589
|
+
period,
|
|
582
590
|
cursor,
|
|
583
591
|
limit
|
|
584
592
|
}) {
|
|
@@ -590,12 +598,12 @@ var InstitutionalManagers = class {
|
|
|
590
598
|
form13fFileNumber,
|
|
591
599
|
"holdings"
|
|
592
600
|
],
|
|
593
|
-
query: { cursor, limit, period
|
|
601
|
+
query: { cursor, limit, period }
|
|
594
602
|
});
|
|
595
603
|
}
|
|
596
604
|
listPositions({
|
|
597
605
|
form13fFileNumber,
|
|
598
|
-
|
|
606
|
+
period,
|
|
599
607
|
cursor,
|
|
600
608
|
limit
|
|
601
609
|
}) {
|
|
@@ -607,10 +615,10 @@ var InstitutionalManagers = class {
|
|
|
607
615
|
form13fFileNumber,
|
|
608
616
|
"positions"
|
|
609
617
|
],
|
|
610
|
-
query: { cursor, limit, period
|
|
618
|
+
query: { cursor, limit, period }
|
|
611
619
|
});
|
|
612
620
|
}
|
|
613
|
-
async *
|
|
621
|
+
async *iterateManagers({
|
|
614
622
|
cik,
|
|
615
623
|
form13fFileNumber,
|
|
616
624
|
limit
|
|
@@ -629,14 +637,14 @@ var InstitutionalManagers = class {
|
|
|
629
637
|
}
|
|
630
638
|
async *iterateHoldings({
|
|
631
639
|
form13fFileNumber,
|
|
632
|
-
|
|
640
|
+
period,
|
|
633
641
|
limit
|
|
634
642
|
}) {
|
|
635
643
|
let cursor;
|
|
636
644
|
do {
|
|
637
645
|
const page = await this.listHoldings({
|
|
638
646
|
form13fFileNumber,
|
|
639
|
-
|
|
647
|
+
period,
|
|
640
648
|
...cursor === void 0 ? {} : { cursor },
|
|
641
649
|
...limit === void 0 ? {} : { limit }
|
|
642
650
|
});
|
|
@@ -646,14 +654,14 @@ var InstitutionalManagers = class {
|
|
|
646
654
|
}
|
|
647
655
|
async *iteratePositions({
|
|
648
656
|
form13fFileNumber,
|
|
649
|
-
|
|
657
|
+
period,
|
|
650
658
|
limit
|
|
651
659
|
}) {
|
|
652
660
|
let cursor;
|
|
653
661
|
do {
|
|
654
662
|
const page = await this.listPositions({
|
|
655
663
|
form13fFileNumber,
|
|
656
|
-
|
|
664
|
+
period,
|
|
657
665
|
...cursor === void 0 ? {} : { cursor },
|
|
658
666
|
...limit === void 0 ? {} : { limit }
|
|
659
667
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error.ts","../src/promise.ts","../src/internal/transport.ts","../src/resources/feeds.ts","../src/resources/products.ts","../src/client.ts"],"sourcesContent":["export interface APIErrorOptions {\n status?: number;\n code?: string;\n headers?: Headers;\n}\n\nexport class APIError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly headers: Headers | undefined;\n\n constructor(message: string, options: APIErrorOptions = {}) {\n super(message);\n this.name = \"APIError\";\n this.status = options.status;\n this.code = options.code;\n this.headers = options.headers;\n }\n}\n","export interface PromiseWithResponse<T> extends Promise<T> {\n withResponse(): Promise<{ data: T; response: Response }>;\n}\n\nexport function createPromiseWithResponse<T>(\n response: Promise<{ data: T; response: Response }>,\n): PromiseWithResponse<T> {\n const promise = response.then(({ data }) => data) as PromiseWithResponse<T>;\n\n Object.defineProperty(promise, \"withResponse\", {\n value: () => response,\n });\n\n // A caller may consume only withResponse(). Mark this branch as handled while\n // preserving the original rejection for ordinary await and Promise chaining.\n void promise.catch(() => undefined);\n return promise;\n}\n","import { APIError } from \"../error\";\nimport {\n createPromiseWithResponse,\n type PromiseWithResponse,\n} from \"../promise\";\n\nexport const ATTEMPT_TIMEOUT_MS = 30_000;\nexport const MAX_RETRIES = 2;\nexport const BASE_RETRY_DELAY_MS = 250;\nexport const MAX_RETRY_DELAY_MS = 30_000;\n\nconst PRODUCTION_BASE_URL = \"https://api.chadwin.co\";\nconst INVALID_BASE_URL_MESSAGE =\n \"baseURL must be an HTTP or HTTPS URL without credentials, a query, or a fragment\";\nconst SAFE_ERROR_CODE = /^[a-z][a-z0-9_]{0,63}$/;\n\ntype QueryScalar = boolean | number | string;\n\nexport type QueryValue =\n | QueryScalar\n | readonly QueryScalar[]\n | null\n | undefined;\n\nexport interface TransportRequest {\n path: readonly string[];\n query?: Readonly<Record<string, QueryValue>>;\n responseType?: \"json\" | \"text\";\n}\n\ninterface HttpTransportOptions {\n apiKey: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\ninterface AttemptErrorResponse {\n code: string | undefined;\n response: Response;\n}\n\nclass AttemptFailure extends Error {\n constructor(readonly timedOut: boolean) {\n super(timedOut ? \"Request timed out\" : \"Network request failed\");\n }\n}\n\nexport class HttpTransport {\n readonly #apiKey: string;\n readonly #fetch: typeof fetch;\n readonly #baseURL: URL;\n\n constructor(options: HttpTransportOptions) {\n this.#apiKey = options.apiKey;\n this.#baseURL = normalizeBaseURL(options.baseURL ?? PRODUCTION_BASE_URL);\n this.#fetch = options.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n\n request<T>(request: TransportRequest): PromiseWithResponse<T> {\n return createPromiseWithResponse(this.#performRequest<T>(request));\n }\n\n async #performRequest<T>(\n request: TransportRequest,\n ): Promise<{ data: T; response: Response }> {\n const url = buildUrl(this.#baseURL, request);\n let lastFailureWasTimeout = false;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n let result: { data: T; response: Response } | AttemptErrorResponse;\n try {\n result = await this.#attempt<T>(url, request.responseType ?? \"json\");\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n if (!(error instanceof AttemptFailure)) {\n throw new APIError(\"API request failed\");\n }\n lastFailureWasTimeout = error.timedOut;\n if (attempt === MAX_RETRIES) {\n throw new APIError(\n lastFailureWasTimeout\n ? \"API request timed out\"\n : \"API request failed\",\n );\n }\n await wait(backoffDelay(attempt));\n continue;\n }\n\n if (\"data\" in result) {\n return result;\n }\n\n if (shouldRetry(result.response.status, result.code) && attempt < MAX_RETRIES) {\n await wait(retryDelay(result.response, attempt));\n continue;\n }\n\n throw errorFromResponse(result.response, result.code, this.#apiKey);\n }\n\n throw new APIError(\n lastFailureWasTimeout ? \"API request timed out\" : \"API request failed\",\n );\n }\n\n async #attempt<T>(\n url: URL,\n responseType: \"json\" | \"text\",\n ): Promise<{ data: T; response: Response } | AttemptErrorResponse> {\n const controller = new AbortController();\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, ATTEMPT_TIMEOUT_MS);\n\n try {\n let response: Response;\n try {\n response = await this.#fetch(url, {\n headers: {\n authorization: `Bearer ${this.#apiKey}`,\n },\n method: \"GET\",\n signal: controller.signal,\n });\n } catch {\n throw new AttemptFailure(timedOut);\n }\n\n if (!response.ok) {\n return {\n code: await readErrorCode(response, this.#apiKey),\n response,\n };\n }\n\n try {\n const data =\n responseType === \"text\"\n ? await response.text()\n : await response.json();\n return { data: data as T, response };\n } catch (error) {\n if (responseType === \"json\" && error instanceof SyntaxError) {\n throw new APIError(\"API returned an invalid JSON response\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n throw new APIError(\"API returned an invalid response body\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction normalizeBaseURL(value: string) {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n if (\n (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n url.username ||\n url.password ||\n url.href !== `${url.origin}${url.pathname}`\n ) {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/`;\n return url;\n}\n\nfunction buildUrl(baseURL: URL, request: TransportRequest) {\n const path = request.path.map((segment) => encodeURIComponent(segment)).join(\"/\");\n const url = new URL(path, baseURL);\n for (const [key, value] of Object.entries(request.query ?? {})) {\n if (value === undefined || value === null) continue;\n const values = Array.isArray(value) ? value : [value];\n for (const entry of values) {\n url.searchParams.append(key, String(entry));\n }\n }\n return url;\n}\n\nasync function readErrorCode(response: Response, apiKey: string) {\n try {\n const body: unknown = await response.json();\n if (\n body !== null &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\" &&\n body.error !== apiKey &&\n SAFE_ERROR_CODE.test(body.error)\n ) {\n return body.error;\n }\n } catch {\n // A missing or malformed error body falls back to the HTTP status.\n }\n return undefined;\n}\n\nfunction shouldRetry(status: number, code: string | undefined) {\n if (code === \"billing_period_quota_exceeded\") return false;\n return (\n code === \"rate_limited\" ||\n status === 502 ||\n status === 503 ||\n status === 504\n );\n}\n\nfunction retryDelay(response: Response, retry: number) {\n const retryAfter = response.headers.get(\"retry-after\");\n if (retryAfter === null) return backoffDelay(retry);\n\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.min(seconds * 1_000, MAX_RETRY_DELAY_MS);\n }\n\n const date = Date.parse(retryAfter);\n if (!Number.isNaN(date)) {\n return Math.min(Math.max(0, date - Date.now()), MAX_RETRY_DELAY_MS);\n }\n\n return backoffDelay(retry);\n}\n\nfunction backoffDelay(retry: number) {\n return Math.min(BASE_RETRY_DELAY_MS * 2 ** retry, MAX_RETRY_DELAY_MS);\n}\n\nfunction wait(milliseconds: number) {\n return new Promise<void>((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction errorFromResponse(\n response: Response,\n code: string | undefined,\n apiKey: string,\n) {\n const suffix = code ? ` (${code})` : \"\";\n return new APIError(\n `API request failed with status ${response.status}${suffix}`,\n {\n ...(code === undefined ? {} : { code }),\n headers: safeErrorHeaders(response.headers, apiKey),\n status: response.status,\n },\n );\n}\n\nfunction safeErrorHeaders(headers: Headers, apiKey: string) {\n const safe = new Headers();\n for (const [name, value] of headers) {\n const normalizedName = name.toLowerCase();\n if (\n normalizedName === \"authorization\" ||\n normalizedName === \"cookie\" ||\n normalizedName === \"proxy-authorization\" ||\n normalizedName === \"set-cookie\" ||\n value.includes(apiKey)\n ) {\n continue;\n }\n safe.append(name, value);\n }\n return safe;\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n CompanyReportFeedFilters,\n InsiderActivityFeedFilters,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n} from \"../types\";\nimport type { JsonResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Feeds {\n readonly companyReports: CompanyReportFeed;\n readonly insiderActivity: InsiderActivityFeed;\n readonly insiderTransactions: InsiderTransactionFeed;\n readonly institutionalFilings: InstitutionalFilingFeed;\n\n constructor(transport: HttpTransport) {\n this.companyReports = new CompanyReportFeed(transport);\n this.insiderActivity = new InsiderActivityFeed(transport);\n this.insiderTransactions = new InsiderTransactionFeed(transport);\n this.institutionalFilings = new InstitutionalFilingFeed(transport);\n }\n}\n\nclass CompanyReportFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: CompanyReportFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: CompanyReportFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"company-reports\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderActivityFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderActivityFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderActivityFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-activity\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderTransactionFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderTransactionFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderTransactionFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\", \"feed\"],\n query: {\n ...mode,\n limit: filters.limit,\n transaction_codes: filters.transactionCodes?.join(\",\"),\n },\n });\n }\n}\n\nclass InstitutionalFilingFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InstitutionalFilingFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InstitutionalFilingFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n InsiderTransactionCode,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"../types\";\nimport type { JsonResponse, TextResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Companies {\n constructor(private readonly transport: HttpTransport) {}\n\n search({ query }: { query: string }): PromiseWithResponse<JsonResponse<\"searchCompanies\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", \"search\"],\n query: { query },\n });\n }\n\n get({ ticker }: { ticker: string }): PromiseWithResponse<JsonResponse<\"getCompany\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker],\n });\n }\n}\n\nexport class CompanyReports {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecCompanyReport\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"company-reports\", accessionNumber],\n });\n }\n\n getByFiscalYear({\n ticker,\n fiscalYear,\n }: {\n ticker: string;\n fiscalYear: number;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReport\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"annual\",\n String(fiscalYear),\n ],\n });\n }\n\n getHtml({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<TextResponse<\"getSecCompanyReportContent\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"company-reports\",\n accessionNumber,\n \"content.html\",\n ],\n responseType: \"text\",\n });\n }\n}\n\nexport class InsiderTransactions {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n filingDateFrom,\n filingDateUntil,\n tickers,\n transactionCodes,\n }: {\n filingDateFrom: string;\n filingDateUntil?: string;\n tickers?: string[];\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\"],\n query: {\n from: filingDateFrom,\n tickers: commaSeparated(tickers),\n transaction_codes: commaSeparated(transactionCodes),\n until: filingDateUntil,\n },\n });\n }\n\n listForCompany({\n ticker,\n filingDateFrom,\n filingDateUntil,\n transactionCodes,\n }: {\n ticker: string;\n filingDateFrom: string;\n filingDateUntil?: string;\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listCompanyInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"insider-transactions\"],\n query: {\n from: filingDateFrom,\n transaction_codes: commaSeparated(transactionCodes),\n until: filingDateUntil,\n },\n });\n }\n}\n\nexport class InsiderFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInsiderFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"insider-filings\", accessionNumber],\n });\n }\n}\n\nexport class ProposedSales {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n filingDateFrom,\n filingDateUntil,\n tickers,\n }: {\n filingDateFrom: string;\n filingDateUntil?: string;\n tickers?: string[];\n }): PromiseWithResponse<JsonResponse<\"listProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"proposed-sales\"],\n query: {\n from: filingDateFrom,\n tickers: commaSeparated(tickers),\n until: filingDateUntil,\n },\n });\n }\n\n listForCompany({\n ticker,\n filingDateFrom,\n filingDateUntil,\n }: {\n ticker: string;\n filingDateFrom: string;\n filingDateUntil?: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"proposed-sales\"],\n query: { from: filingDateFrom, until: filingDateUntil },\n });\n }\n\n getFiling({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecProposedSaleFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"proposed-sales\", accessionNumber],\n });\n }\n}\n\nexport class InstitutionalFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInstitutionalFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"institutional-filings\", accessionNumber],\n });\n }\n\n listHoldings({\n accessionNumber,\n cursor,\n limit,\n }: {\n accessionNumber: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listSecInstitutionalFilingHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"institutional-filings\",\n accessionNumber,\n \"holdings\",\n ],\n query: { cursor, limit },\n });\n }\n\n async *iterateHoldings({\n accessionNumber,\n limit,\n }: {\n accessionNumber: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n accessionNumber,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nexport class InstitutionalManagers {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n cik,\n form13fFileNumber,\n cursor,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n cursor?: string;\n limit?: number;\n } = {}): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"managers\"],\n query: {\n cik,\n cursor,\n form_13f_file_number: form13fFileNumber,\n limit,\n },\n });\n }\n\n get({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getInstitutionalHoldingManager\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n ],\n });\n }\n\n listPeriods({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerPeriods\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"periods\",\n ],\n });\n }\n\n listHoldings({\n form13fFileNumber,\n reportPeriod,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n reportPeriod: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"holdings\",\n ],\n query: { cursor, limit, period: reportPeriod },\n });\n }\n\n listPositions({\n form13fFileNumber,\n reportPeriod,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n reportPeriod: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerPositions\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"positions\",\n ],\n query: { cursor, limit, period: reportPeriod },\n });\n }\n\n async *iterate({\n cik,\n form13fFileNumber,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n limit?: number;\n } = {}): AsyncGenerator<InstitutionalManager> {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n ...(cik === undefined ? {} : { cik }),\n ...(cursor === undefined ? {} : { cursor }),\n ...(form13fFileNumber === undefined ? {} : { form13fFileNumber }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.managers;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateHoldings({\n form13fFileNumber,\n reportPeriod,\n limit,\n }: {\n form13fFileNumber: string;\n reportPeriod: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n form13fFileNumber,\n reportPeriod,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iteratePositions({\n form13fFileNumber,\n reportPeriod,\n limit,\n }: {\n form13fFileNumber: string;\n reportPeriod: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalPosition> {\n let cursor: string | undefined;\n do {\n const page = await this.listPositions({\n form13fFileNumber,\n reportPeriod,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.positions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nfunction commaSeparated(values: readonly string[] | undefined) {\n return values?.join(\",\");\n}\n","import { HttpTransport } from \"./internal/transport\";\nimport { Feeds } from \"./resources/feeds\";\nimport {\n Companies,\n CompanyReports,\n InsiderFilings,\n InsiderTransactions,\n InstitutionalFilings,\n InstitutionalManagers,\n ProposedSales,\n} from \"./resources/products\";\n\nexport interface ClientOptions {\n apiKey: string;\n baseURL?: string;\n}\n\nexport class Chadwin {\n readonly companies: Companies;\n readonly companyReports: CompanyReports;\n readonly feeds: Feeds;\n readonly insiderFilings: InsiderFilings;\n readonly insiderTransactions: InsiderTransactions;\n readonly institutionalFilings: InstitutionalFilings;\n readonly institutionalManagers: InstitutionalManagers;\n readonly proposedSales: ProposedSales;\n\n constructor(options: ClientOptions) {\n if (\n !options ||\n typeof options.apiKey !== \"string\" ||\n options.apiKey.trim().length === 0\n ) {\n throw new TypeError(\"A non-empty Chadwin API key is required\");\n }\n\n const transport = new HttpTransport({\n apiKey: options.apiKey,\n ...(options.baseURL === undefined ? {} : { baseURL: options.baseURL }),\n });\n this.companies = new Companies(transport);\n this.companyReports = new CompanyReports(transport);\n this.feeds = new Feeds(transport);\n this.insiderFilings = new InsiderFilings(transport);\n this.insiderTransactions = new InsiderTransactions(transport);\n this.institutionalFilings = new InstitutionalFilings(transport);\n this.institutionalManagers = new InstitutionalManagers(transport);\n this.proposedSales = new ProposedSales(transport);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/error.ts","../src/promise.ts","../src/internal/transport.ts","../src/resources/feeds.ts","../src/resources/products.ts","../src/client.ts"],"sourcesContent":["export interface APIErrorOptions {\n status?: number;\n code?: string;\n headers?: Headers;\n}\n\nexport class APIError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly headers: Headers | undefined;\n\n constructor(message: string, options: APIErrorOptions = {}) {\n super(message);\n this.name = \"APIError\";\n this.status = options.status;\n this.code = options.code;\n this.headers = options.headers;\n }\n}\n","export interface PromiseWithResponse<T> extends Promise<T> {\n withResponse(): Promise<{ data: T; response: Response }>;\n}\n\nexport function createPromiseWithResponse<T>(\n response: Promise<{ data: T; response: Response }>,\n): PromiseWithResponse<T> {\n const promise = response.then(({ data }) => data) as PromiseWithResponse<T>;\n\n Object.defineProperty(promise, \"withResponse\", {\n value: () => response,\n });\n\n // A caller may consume only withResponse(). Mark this branch as handled while\n // preserving the original rejection for ordinary await and Promise chaining.\n void promise.catch(() => undefined);\n return promise;\n}\n","import { APIError } from \"../error\";\nimport {\n createPromiseWithResponse,\n type PromiseWithResponse,\n} from \"../promise\";\n\nexport const ATTEMPT_TIMEOUT_MS = 30_000;\nexport const MAX_RETRIES = 2;\nexport const BASE_RETRY_DELAY_MS = 250;\nexport const MAX_RETRY_DELAY_MS = 30_000;\n\nconst PRODUCTION_BASE_URL = \"https://api.chadwin.co\";\nconst INVALID_BASE_URL_MESSAGE =\n \"baseURL must be an HTTP or HTTPS URL without credentials, a query, or a fragment\";\nconst SAFE_ERROR_CODE = /^[a-z][a-z0-9_]{0,63}$/;\n\ntype QueryScalar = boolean | number | string;\n\nexport type QueryValue =\n | QueryScalar\n | readonly QueryScalar[]\n | null\n | undefined;\n\nexport interface TransportRequest {\n path: readonly string[];\n query?: Readonly<Record<string, QueryValue>>;\n responseType?: \"json\" | \"text\";\n}\n\ninterface HttpTransportOptions {\n apiKey: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\ninterface AttemptErrorResponse {\n code: string | undefined;\n response: Response;\n}\n\nclass AttemptFailure extends Error {\n constructor(readonly timedOut: boolean) {\n super(timedOut ? \"Request timed out\" : \"Network request failed\");\n }\n}\n\nexport class HttpTransport {\n readonly #apiKey: string;\n readonly #fetch: typeof fetch;\n readonly #baseURL: URL;\n\n constructor(options: HttpTransportOptions) {\n this.#apiKey = options.apiKey;\n this.#baseURL = normalizeBaseURL(options.baseURL ?? PRODUCTION_BASE_URL);\n this.#fetch = options.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n\n request<T>(request: TransportRequest): PromiseWithResponse<T> {\n return createPromiseWithResponse(this.#performRequest<T>(request));\n }\n\n async #performRequest<T>(\n request: TransportRequest,\n ): Promise<{ data: T; response: Response }> {\n const url = buildUrl(this.#baseURL, request);\n let lastFailureWasTimeout = false;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n let result: { data: T; response: Response } | AttemptErrorResponse;\n try {\n result = await this.#attempt<T>(url, request.responseType ?? \"json\");\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n if (!(error instanceof AttemptFailure)) {\n throw new APIError(\"API request failed\");\n }\n lastFailureWasTimeout = error.timedOut;\n if (attempt === MAX_RETRIES) {\n throw new APIError(\n lastFailureWasTimeout\n ? \"API request timed out\"\n : \"API request failed\",\n );\n }\n await wait(backoffDelay(attempt));\n continue;\n }\n\n if (\"data\" in result) {\n return result;\n }\n\n if (shouldRetry(result.response.status, result.code) && attempt < MAX_RETRIES) {\n await wait(retryDelay(result.response, attempt));\n continue;\n }\n\n throw errorFromResponse(result.response, result.code, this.#apiKey);\n }\n\n throw new APIError(\n lastFailureWasTimeout ? \"API request timed out\" : \"API request failed\",\n );\n }\n\n async #attempt<T>(\n url: URL,\n responseType: \"json\" | \"text\",\n ): Promise<{ data: T; response: Response } | AttemptErrorResponse> {\n const controller = new AbortController();\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, ATTEMPT_TIMEOUT_MS);\n\n try {\n let response: Response;\n try {\n response = await this.#fetch(url, {\n headers: {\n authorization: `Bearer ${this.#apiKey}`,\n },\n method: \"GET\",\n signal: controller.signal,\n });\n } catch {\n throw new AttemptFailure(timedOut);\n }\n\n if (!response.ok) {\n return {\n code: await readErrorCode(response, this.#apiKey),\n response,\n };\n }\n\n try {\n const data =\n responseType === \"text\"\n ? await response.text()\n : await response.json();\n return { data: data as T, response };\n } catch (error) {\n if (responseType === \"json\" && error instanceof SyntaxError) {\n throw new APIError(\"API returned an invalid JSON response\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n throw new APIError(\"API returned an invalid response body\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction normalizeBaseURL(value: string) {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n if (\n (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n url.username ||\n url.password ||\n url.href !== `${url.origin}${url.pathname}`\n ) {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/`;\n return url;\n}\n\nfunction buildUrl(baseURL: URL, request: TransportRequest) {\n const path = request.path.map((segment) => encodeURIComponent(segment)).join(\"/\");\n const url = new URL(path, baseURL);\n for (const [key, value] of Object.entries(request.query ?? {})) {\n if (value === undefined || value === null) continue;\n const values = Array.isArray(value) ? value : [value];\n for (const entry of values) {\n url.searchParams.append(key, String(entry));\n }\n }\n return url;\n}\n\nasync function readErrorCode(response: Response, apiKey: string) {\n try {\n const body: unknown = await response.json();\n if (\n body !== null &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\" &&\n body.error !== apiKey &&\n SAFE_ERROR_CODE.test(body.error)\n ) {\n return body.error;\n }\n } catch {\n // A missing or malformed error body falls back to the HTTP status.\n }\n return undefined;\n}\n\nfunction shouldRetry(status: number, code: string | undefined) {\n if (code === \"billing_period_quota_exceeded\") return false;\n return (\n code === \"rate_limited\" ||\n status === 502 ||\n status === 503 ||\n status === 504\n );\n}\n\nfunction retryDelay(response: Response, retry: number) {\n const retryAfter = response.headers.get(\"retry-after\");\n if (retryAfter === null) return backoffDelay(retry);\n\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.min(seconds * 1_000, MAX_RETRY_DELAY_MS);\n }\n\n const date = Date.parse(retryAfter);\n if (!Number.isNaN(date)) {\n return Math.min(Math.max(0, date - Date.now()), MAX_RETRY_DELAY_MS);\n }\n\n return backoffDelay(retry);\n}\n\nfunction backoffDelay(retry: number) {\n return Math.min(BASE_RETRY_DELAY_MS * 2 ** retry, MAX_RETRY_DELAY_MS);\n}\n\nfunction wait(milliseconds: number) {\n return new Promise<void>((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction errorFromResponse(\n response: Response,\n code: string | undefined,\n apiKey: string,\n) {\n const suffix = code ? ` (${code})` : \"\";\n return new APIError(\n `API request failed with status ${response.status}${suffix}`,\n {\n ...(code === undefined ? {} : { code }),\n headers: safeErrorHeaders(response.headers, apiKey),\n status: response.status,\n },\n );\n}\n\nfunction safeErrorHeaders(headers: Headers, apiKey: string) {\n const safe = new Headers();\n for (const [name, value] of headers) {\n const normalizedName = name.toLowerCase();\n if (\n normalizedName === \"authorization\" ||\n normalizedName === \"cookie\" ||\n normalizedName === \"proxy-authorization\" ||\n normalizedName === \"set-cookie\" ||\n value.includes(apiKey)\n ) {\n continue;\n }\n safe.append(name, value);\n }\n return safe;\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n CompanyReportFeedFilters,\n InsiderActivityFeedFilters,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n} from \"../types\";\nimport type { JsonResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Feeds {\n readonly companyReports: CompanyReportFeed;\n readonly insiderActivity: InsiderActivityFeed;\n readonly insiderTransactions: InsiderTransactionFeed;\n readonly institutionalFilings: InstitutionalFilingFeed;\n\n constructor(transport: HttpTransport) {\n this.companyReports = new CompanyReportFeed(transport);\n this.insiderActivity = new InsiderActivityFeed(transport);\n this.insiderTransactions = new InsiderTransactionFeed(transport);\n this.institutionalFilings = new InstitutionalFilingFeed(transport);\n }\n}\n\nclass CompanyReportFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: CompanyReportFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: CompanyReportFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"company-reports\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderActivityFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderActivityFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderActivityFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-activity\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderTransactionFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderTransactionFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderTransactionFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\", \"feed\"],\n query: {\n ...mode,\n limit: filters.limit,\n transaction_codes: filters.transactionCodes?.join(\",\"),\n },\n });\n }\n}\n\nclass InstitutionalFilingFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InstitutionalFilingFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InstitutionalFilingFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n InsiderTransactionCode,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"../types\";\nimport type { JsonResponse, TextResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Companies {\n constructor(private readonly transport: HttpTransport) {}\n\n search({ query }: { query: string }): PromiseWithResponse<JsonResponse<\"searchCompanies\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", \"search\"],\n query: { query },\n });\n }\n\n get({ ticker }: { ticker: string }): PromiseWithResponse<JsonResponse<\"getCompany\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker],\n });\n }\n}\n\nexport class CompanyReports {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecCompanyReport\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"company-reports\", accessionNumber],\n });\n }\n\n getByFiscalYear({\n ticker,\n fiscalYear,\n }: {\n ticker: string;\n fiscalYear: number;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReport\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"annual\",\n String(fiscalYear),\n ],\n });\n }\n\n getHtml({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<TextResponse<\"getSecCompanyReportContent\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"company-reports\",\n accessionNumber,\n \"content.html\",\n ],\n responseType: \"text\",\n });\n }\n}\n\nexport class InsiderTransactions {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n from,\n until,\n tickers,\n transactionCodes,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\"],\n query: {\n from,\n tickers: commaSeparated(tickers),\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n\n listForCompany({\n ticker,\n from,\n until,\n transactionCodes,\n }: {\n ticker: string;\n from: string;\n until?: string;\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listCompanyInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"insider-transactions\"],\n query: {\n from,\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n}\n\nexport class InsiderFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInsiderFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"insider-filings\", accessionNumber],\n });\n }\n}\n\nexport class ProposedSales {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n from,\n until,\n tickers,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n }): PromiseWithResponse<JsonResponse<\"listProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"proposed-sales\"],\n query: {\n from,\n tickers: commaSeparated(tickers),\n until,\n },\n });\n }\n\n listForCompany({\n ticker,\n from,\n until,\n }: {\n ticker: string;\n from: string;\n until?: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"proposed-sales\"],\n query: { from, until },\n });\n }\n\n getFiling({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecProposedSaleFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"proposed-sales\", accessionNumber],\n });\n }\n}\n\nexport class InstitutionalFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInstitutionalFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"institutional-filings\", accessionNumber],\n });\n }\n\n listHoldings({\n accessionNumber,\n cursor,\n limit,\n }: {\n accessionNumber: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listSecInstitutionalFilingHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"institutional-filings\",\n accessionNumber,\n \"holdings\",\n ],\n query: { cursor, limit },\n });\n }\n\n async *iterateHoldings({\n accessionNumber,\n limit,\n }: {\n accessionNumber: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n accessionNumber,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nexport class InstitutionalManagers {\n constructor(private readonly transport: HttpTransport) {}\n\n search({\n query,\n }: {\n query: string;\n }): PromiseWithResponse<JsonResponse<\"searchInstitutionalHoldingManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"managers\", \"search\"],\n query: { query },\n });\n }\n\n list({\n cik,\n form13fFileNumber,\n cursor,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n cursor?: string;\n limit?: number;\n } = {}): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-holdings\", \"managers\"],\n query: {\n cik,\n cursor,\n form_13f_file_number: form13fFileNumber,\n limit,\n },\n });\n }\n\n get({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getInstitutionalHoldingManager\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n ],\n });\n }\n\n listPeriods({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerPeriods\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"periods\",\n ],\n });\n }\n\n listHoldings({\n form13fFileNumber,\n period,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"holdings\",\n ],\n query: { cursor, limit, period },\n });\n }\n\n listPositions({\n form13fFileNumber,\n period,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalHoldingManagerPositions\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"institutional-holdings\",\n \"managers\",\n form13fFileNumber,\n \"positions\",\n ],\n query: { cursor, limit, period },\n });\n }\n\n async *iterateManagers({\n cik,\n form13fFileNumber,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n limit?: number;\n } = {}): AsyncGenerator<InstitutionalManager> {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n ...(cik === undefined ? {} : { cik }),\n ...(cursor === undefined ? {} : { cursor }),\n ...(form13fFileNumber === undefined ? {} : { form13fFileNumber }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.managers;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateHoldings({\n form13fFileNumber,\n period,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n form13fFileNumber,\n period,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iteratePositions({\n form13fFileNumber,\n period,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalPosition> {\n let cursor: string | undefined;\n do {\n const page = await this.listPositions({\n form13fFileNumber,\n period,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.positions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nfunction commaSeparated(values: readonly string[] | undefined) {\n return values?.join(\",\");\n}\n","import { HttpTransport } from \"./internal/transport\";\nimport { Feeds } from \"./resources/feeds\";\nimport {\n Companies,\n CompanyReports,\n InsiderFilings,\n InsiderTransactions,\n InstitutionalFilings,\n InstitutionalManagers,\n ProposedSales,\n} from \"./resources/products\";\n\nexport interface ClientOptions {\n apiKey: string;\n baseURL?: string;\n}\n\nexport class Chadwin {\n readonly companies: Companies;\n readonly companyReports: CompanyReports;\n readonly feeds: Feeds;\n readonly insiderFilings: InsiderFilings;\n readonly insiderTransactions: InsiderTransactions;\n readonly institutionalFilings: InstitutionalFilings;\n readonly institutionalManagers: InstitutionalManagers;\n readonly proposedSales: ProposedSales;\n\n constructor(options: ClientOptions) {\n if (\n !options ||\n typeof options.apiKey !== \"string\" ||\n options.apiKey.trim().length === 0\n ) {\n throw new TypeError(\"A non-empty Chadwin API key is required\");\n }\n\n const transport = new HttpTransport({\n apiKey: options.apiKey,\n ...(options.baseURL === undefined ? {} : { baseURL: options.baseURL }),\n });\n this.companies = new Companies(transport);\n this.companyReports = new CompanyReports(transport);\n this.feeds = new Feeds(transport);\n this.insiderFilings = new InsiderFilings(transport);\n this.insiderTransactions = new InsiderTransactions(transport);\n this.institutionalFilings = new InstitutionalFilings(transport);\n this.institutionalManagers = new InstitutionalManagers(transport);\n this.proposedSales = new ProposedSales(transport);\n }\n}\n"],"mappings":"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","names":[]}
|