@chadwin/sdk 0.5.0 → 0.7.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.js CHANGED
@@ -417,13 +417,34 @@ var CompanyReports = class {
417
417
  });
418
418
  }
419
419
  };
420
+ var FinancialStatements = class {
421
+ constructor(transport) {
422
+ this.transport = transport;
423
+ }
424
+ transport;
425
+ get({
426
+ ticker,
427
+ fiscalYear,
428
+ years
429
+ }) {
430
+ return this.transport.request({
431
+ path: ["v1", "companies", "US", ticker, "financial-statements"],
432
+ query: {
433
+ fiscal_year: fiscalYear,
434
+ years
435
+ }
436
+ });
437
+ }
438
+ };
420
439
  var InsiderTransactions = class {
421
440
  constructor(transport) {
422
441
  this.transport = transport;
423
442
  }
424
443
  transport;
425
444
  list({
445
+ cursor,
426
446
  from,
447
+ limit,
427
448
  until,
428
449
  tickers,
429
450
  transactionCodes
@@ -431,7 +452,9 @@ var InsiderTransactions = class {
431
452
  return this.transport.request({
432
453
  path: ["v1", "insider-transactions"],
433
454
  query: {
455
+ cursor,
434
456
  from,
457
+ limit,
435
458
  tickers: commaSeparated(tickers),
436
459
  transaction_codes: commaSeparated(transactionCodes),
437
460
  until
@@ -439,20 +462,66 @@ var InsiderTransactions = class {
439
462
  });
440
463
  }
441
464
  listForCompany({
465
+ cursor,
442
466
  ticker,
443
467
  from,
468
+ limit,
444
469
  until,
445
470
  transactionCodes
446
471
  }) {
447
472
  return this.transport.request({
448
473
  path: ["v1", "companies", "US", ticker, "insider-transactions"],
449
474
  query: {
475
+ cursor,
450
476
  from,
477
+ limit,
451
478
  transaction_codes: commaSeparated(transactionCodes),
452
479
  until
453
480
  }
454
481
  });
455
482
  }
483
+ async *iterate({
484
+ from,
485
+ until,
486
+ tickers,
487
+ transactionCodes,
488
+ limit
489
+ }) {
490
+ let cursor;
491
+ do {
492
+ const page = await this.list({
493
+ from,
494
+ ...until === void 0 ? {} : { until },
495
+ ...tickers === void 0 ? {} : { tickers },
496
+ ...transactionCodes === void 0 ? {} : { transactionCodes },
497
+ ...limit === void 0 ? {} : { limit },
498
+ ...cursor === void 0 ? {} : { cursor }
499
+ });
500
+ yield* page.transactions;
501
+ cursor = page.next_cursor ?? void 0;
502
+ } while (cursor !== void 0);
503
+ }
504
+ async *iterateForCompany({
505
+ ticker,
506
+ from,
507
+ until,
508
+ transactionCodes,
509
+ limit
510
+ }) {
511
+ let cursor;
512
+ do {
513
+ const page = await this.listForCompany({
514
+ ticker,
515
+ from,
516
+ ...until === void 0 ? {} : { until },
517
+ ...transactionCodes === void 0 ? {} : { transactionCodes },
518
+ ...limit === void 0 ? {} : { limit },
519
+ ...cursor === void 0 ? {} : { cursor }
520
+ });
521
+ yield* page.transactions;
522
+ cursor = page.next_cursor ?? void 0;
523
+ } while (cursor !== void 0);
524
+ }
456
525
  };
457
526
  var InsiderFilings = class {
458
527
  constructor(transport) {
@@ -473,29 +542,73 @@ var ProposedSales = class {
473
542
  }
474
543
  transport;
475
544
  list({
545
+ cursor,
476
546
  from,
547
+ limit,
477
548
  until,
478
549
  tickers
479
550
  }) {
480
551
  return this.transport.request({
481
552
  path: ["v1", "proposed-sales"],
482
553
  query: {
554
+ cursor,
483
555
  from,
556
+ limit,
484
557
  tickers: commaSeparated(tickers),
485
558
  until
486
559
  }
487
560
  });
488
561
  }
489
562
  listForCompany({
563
+ cursor,
490
564
  ticker,
491
565
  from,
566
+ limit,
492
567
  until
493
568
  }) {
494
569
  return this.transport.request({
495
570
  path: ["v1", "companies", "US", ticker, "proposed-sales"],
496
- query: { from, until }
571
+ query: { cursor, from, limit, until }
497
572
  });
498
573
  }
574
+ async *iterate({
575
+ from,
576
+ until,
577
+ tickers,
578
+ limit
579
+ }) {
580
+ let cursor;
581
+ do {
582
+ const page = await this.list({
583
+ from,
584
+ ...until === void 0 ? {} : { until },
585
+ ...tickers === void 0 ? {} : { tickers },
586
+ ...limit === void 0 ? {} : { limit },
587
+ ...cursor === void 0 ? {} : { cursor }
588
+ });
589
+ yield* page.proposed_sales;
590
+ cursor = page.next_cursor ?? void 0;
591
+ } while (cursor !== void 0);
592
+ }
593
+ async *iterateForCompany({
594
+ ticker,
595
+ from,
596
+ until,
597
+ limit
598
+ }) {
599
+ let cursor;
600
+ do {
601
+ const page = await this.listForCompany({
602
+ ticker,
603
+ from,
604
+ ...until === void 0 ? {} : { until },
605
+ ...limit === void 0 ? {} : { limit },
606
+ ...cursor === void 0 ? {} : { cursor }
607
+ });
608
+ yield* page.proposed_sales;
609
+ cursor = page.next_cursor ?? void 0;
610
+ } while (cursor !== void 0);
611
+ }
499
612
  getFiling({
500
613
  accessionNumber
501
614
  }) {
@@ -674,6 +787,7 @@ var Chadwin = class {
674
787
  companies;
675
788
  companyReports;
676
789
  feeds;
790
+ financialStatements;
677
791
  insiderFilings;
678
792
  insiderTransactions;
679
793
  institutionalFilings;
@@ -690,6 +804,7 @@ var Chadwin = class {
690
804
  this.companies = new Companies(transport);
691
805
  this.companyReports = new CompanyReports(transport);
692
806
  this.feeds = new Feeds(transport);
807
+ this.financialStatements = new FinancialStatements(transport);
693
808
  this.insiderFilings = new InsiderFilings(transport);
694
809
  this.insiderTransactions = new InsiderTransactions(transport);
695
810
  this.institutionalFilings = new InstitutionalFilings(transport);
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<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InstitutionalFilingFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InstitutionalFilingFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-filings\", \"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 CompanyReportFiscalPeriod,\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 getByFiscalPeriod({\n ticker,\n fiscalYear,\n fiscalPeriod,\n }: {\n ticker: string;\n fiscalYear: number;\n fiscalPeriod: CompanyReportFiscalPeriod;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReportForFiscalPeriod\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"quarterly\",\n String(fiscalYear),\n fiscalPeriod,\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-sale-filings\", 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<\"searchInstitutionalManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-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<\"listInstitutionalManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-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<\"getInstitutionalManager\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber],\n });\n }\n\n listPeriods({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalManagerPeriods\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"periods\"],\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<\"listInstitutionalManagerHoldings\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"holdings\"],\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<\"listInstitutionalManagerPositions\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"positions\"],\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":[]}
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<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InstitutionalFilingFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InstitutionalFilingFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-filings\", \"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 CompanyReportFiscalPeriod,\n FinancialStatementsGetParams,\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 getByFiscalPeriod({\n ticker,\n fiscalYear,\n fiscalPeriod,\n }: {\n ticker: string;\n fiscalYear: number;\n fiscalPeriod: CompanyReportFiscalPeriod;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReportForFiscalPeriod\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"quarterly\",\n String(fiscalYear),\n fiscalPeriod,\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 FinancialStatements {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n ticker,\n fiscalYear,\n years,\n }: FinancialStatementsGetParams): PromiseWithResponse<\n JsonResponse<\"getCompanyFinancialStatements\">\n > {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"financial-statements\"],\n query: {\n fiscal_year: fiscalYear,\n years,\n },\n });\n }\n}\n\nexport class InsiderTransactions {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n cursor,\n from,\n limit,\n until,\n tickers,\n transactionCodes,\n }: {\n cursor?: string;\n from: string;\n limit?: number;\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 cursor,\n from,\n limit,\n tickers: commaSeparated(tickers),\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n\n listForCompany({\n cursor,\n ticker,\n from,\n limit,\n until,\n transactionCodes,\n }: {\n cursor?: string;\n ticker: string;\n from: string;\n limit?: number;\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 cursor,\n from,\n limit,\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n\n async *iterate({\n from,\n until,\n tickers,\n transactionCodes,\n limit,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n transactionCodes?: InsiderTransactionCode[];\n limit?: number;\n }): AsyncGenerator<\n JsonResponse<\"listInsiderTransactions\">[\"transactions\"][number]\n > {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n from,\n ...(until === undefined ? {} : { until }),\n ...(tickers === undefined ? {} : { tickers }),\n ...(transactionCodes === undefined ? {} : { transactionCodes }),\n ...(limit === undefined ? {} : { limit }),\n ...(cursor === undefined ? {} : { cursor }),\n });\n yield* page.transactions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateForCompany({\n ticker,\n from,\n until,\n transactionCodes,\n limit,\n }: {\n ticker: string;\n from: string;\n until?: string;\n transactionCodes?: InsiderTransactionCode[];\n limit?: number;\n }): AsyncGenerator<\n JsonResponse<\"listCompanyInsiderTransactions\">[\"transactions\"][number]\n > {\n let cursor: string | undefined;\n do {\n const page = await this.listForCompany({\n ticker,\n from,\n ...(until === undefined ? {} : { until }),\n ...(transactionCodes === undefined ? {} : { transactionCodes }),\n ...(limit === undefined ? {} : { limit }),\n ...(cursor === undefined ? {} : { cursor }),\n });\n yield* page.transactions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\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 cursor,\n from,\n limit,\n until,\n tickers,\n }: {\n cursor?: string;\n from: string;\n limit?: number;\n until?: string;\n tickers?: string[];\n }): PromiseWithResponse<JsonResponse<\"listProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"proposed-sales\"],\n query: {\n cursor,\n from,\n limit,\n tickers: commaSeparated(tickers),\n until,\n },\n });\n }\n\n listForCompany({\n cursor,\n ticker,\n from,\n limit,\n until,\n }: {\n cursor?: string;\n ticker: string;\n from: string;\n limit?: number;\n until?: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"proposed-sales\"],\n query: { cursor, from, limit, until },\n });\n }\n\n async *iterate({\n from,\n until,\n tickers,\n limit,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n limit?: number;\n }): AsyncGenerator<\n JsonResponse<\"listProposedSales\">[\"proposed_sales\"][number]\n > {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n from,\n ...(until === undefined ? {} : { until }),\n ...(tickers === undefined ? {} : { tickers }),\n ...(limit === undefined ? {} : { limit }),\n ...(cursor === undefined ? {} : { cursor }),\n });\n yield* page.proposed_sales;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateForCompany({\n ticker,\n from,\n until,\n limit,\n }: {\n ticker: string;\n from: string;\n until?: string;\n limit?: number;\n }): AsyncGenerator<\n JsonResponse<\"listCompanyProposedSales\">[\"proposed_sales\"][number]\n > {\n let cursor: string | undefined;\n do {\n const page = await this.listForCompany({\n ticker,\n from,\n ...(until === undefined ? {} : { until }),\n ...(limit === undefined ? {} : { limit }),\n ...(cursor === undefined ? {} : { cursor }),\n });\n yield* page.proposed_sales;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n getFiling({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecProposedSaleFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"proposed-sale-filings\", 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<\"searchInstitutionalManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-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<\"listInstitutionalManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-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<\"getInstitutionalManager\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber],\n });\n }\n\n listPeriods({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalManagerPeriods\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"periods\"],\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<\"listInstitutionalManagerHoldings\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"holdings\"],\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<\"listInstitutionalManagerPositions\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"positions\"],\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 FinancialStatements,\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 financialStatements: FinancialStatements;\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.financialStatements = new FinancialStatements(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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chadwin/sdk",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Official Node.js SDK for the Chadwin API",
5
5
  "license": "MIT",
6
6
  "homepage": "https://www.chadwin.co/docs/nodejs-sdk",