@chadwin/sdk 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,3 +43,23 @@ MCP keeps `get_company`, `search_companies`, and `get_financial_statements`; com
43
43
  Use `companyReports.getForPeriod({ ticker: "AAPL", fiscalYear: 2025, fiscalPeriod: "FY" })` for annual reports or Q1/Q2/Q3 for quarters. Replace ticker with a string CIK to select a filing entity directly. The period is required; FY is not Q4.
44
44
 
45
45
  This replaces `getByFiscalYear` and `getByFiscalPeriod`. HTTP clients use `/v1/companies/reports` with exactly one `ticker` or `cik`, plus `fiscal_year` and `fiscal_period`; the former four annual/quarterly ticker/CIK URLs return 404. MCP replaces the two fiscal selection tools with `get_company_report_for_period`. Exact accession metadata and HTML retrieval keep their existing methods and tools.
46
+
47
+ ## Upgrade to 0.10
48
+ Use `companyReports.get({ ticker: "AAPL", fiscalYear: 2025, fiscalPeriod: "FY" })` for a company and fiscal period. This replaces `companyReports.getForPeriod`. Exact accession lookup moves from `companyReports.get({ accessionNumber })` to `companyReports.getByAccession({ accessionNumber })`. HTML retrieval and report feeds keep their existing methods.
49
+
50
+ MCP uses `get_company_report` for company and period, and `get_company_report_by_accession` for an exact accession. The old period tool name is removed. Stale accession-only input to the period tool fails validation. HTTP report paths and inputs stay the same.
51
+
52
+ Insider transactions and proposed sales use `list` and `iterate` for one company, a watchlist, or the listed-company universe. Replace `listForCompany({ ticker, ... })` and `iterateForCompany({ ticker, ... })` with `list({ tickers: [ticker], ... })` and `iterate({ tickers: [ticker], ... })`. Each row contains its issuer; there is no separate company envelope.
53
+
54
+ HTTP clients use `/v1/insider-transactions` and `/v1/proposed-sales` with optional `tickers` or `ciks` comma lists. The old `/v1/companies/US/{ticker}/insider-transactions` and `/v1/companies/US/{ticker}/proposed-sales` URLs return JSON 404. MCP history tools accept the same mutually exclusive lists. SDK callers use string arrays, for example `client.insiderTransactions.list({ ciks: ["0000034088"], from: "2026-01-01", until: "2026-01-31" })`.
55
+
56
+ CIKs select filing entities directly, including eligible rows without current listings. Omit both filters for the current listed-company universe. Unknown or ambiguous tickers fail the whole request. Empty or mixed lists fail validation. Histories retain filing-date windows, transaction codes, page limits, access, and quotas.
57
+
58
+ Restart history pagination after upgrading: old cursors return `invalid_cursor`. Keep the same identifiers, dates, codes, and page size for continuation. A changed ticker-to-CIK mapping also returns `invalid_cursor`; restart instead of reusing that cursor.
59
+
60
+ ## Current reports in 0.11
61
+ Use `currentReports.list({ from: "2026-08-01", until: "2026-08-31" })` for 8-K/6-K history across filing entities. Add `cik`, exact `forms` (including amendments), or 8-K `items` to narrow the results. Continue with `next_cursor` and the same filters and page size. Metadata comes from `currentReports.get({ accessionNumber })`.
62
+
63
+ Call `currentReports.getHtml({ accessionNumber })` once for the cleaned primary plus every supplied HTML or plain-text exhibit, with supported images. PDF and other excluded exhibits remain SEC source links in the returned HTML. Source dates can be null; 8-K item codes remain in `item_codes`. This resource requires `current_reports` access; periodic Company Reports methods keep their scope.
64
+
65
+ Use `feeds.currentReports.listLatest()`, `.listAfter({ cursor })`, or `.startFromNow()` to follow publication events. Feed `forms` accepts the `8-K` and `6-K` families and includes amendments. Save `next_cursor` even on empty pages. Current-report and periodic-report feed cursors are separate.
package/dist/index.cjs CHANGED
@@ -242,11 +242,13 @@ function safeErrorHeaders(headers, apiKey) {
242
242
  // src/resources/feeds.ts
243
243
  var Feeds = class {
244
244
  companyReports;
245
+ currentReports;
245
246
  insiderActivity;
246
247
  insiderTransactions;
247
248
  institutionalFilings;
248
249
  constructor(transport) {
249
250
  this.companyReports = new CompanyReportFeed(transport);
251
+ this.currentReports = new CurrentReportFeed(transport);
250
252
  this.insiderActivity = new InsiderActivityFeed(transport);
251
253
  this.insiderTransactions = new InsiderTransactionFeed(transport);
252
254
  this.institutionalFilings = new InstitutionalFilingFeed(transport);
@@ -280,6 +282,34 @@ var CompanyReportFeed = class {
280
282
  });
281
283
  }
282
284
  };
285
+ var CurrentReportFeed = class {
286
+ constructor(transport) {
287
+ this.transport = transport;
288
+ }
289
+ transport;
290
+ listLatest(filters = {}) {
291
+ return this.#request(filters, {});
292
+ }
293
+ listAfter({
294
+ cursor,
295
+ ...filters
296
+ }) {
297
+ return this.#request(filters, { cursor });
298
+ }
299
+ startFromNow(filters = {}) {
300
+ return this.#request(filters, { start: "now" });
301
+ }
302
+ #request(filters, mode) {
303
+ return this.transport.request({
304
+ path: ["v1", "current-reports", "feed"],
305
+ query: {
306
+ ...mode,
307
+ forms: filters.forms?.join(","),
308
+ limit: filters.limit
309
+ }
310
+ });
311
+ }
312
+ };
283
313
  var InsiderActivityFeed = class {
284
314
  constructor(transport) {
285
315
  this.transport = transport;
@@ -389,14 +419,14 @@ var CompanyReports = class {
389
419
  this.transport = transport;
390
420
  }
391
421
  transport;
392
- get({
422
+ getByAccession({
393
423
  accessionNumber
394
424
  }) {
395
425
  return this.transport.request({
396
426
  path: ["v1", "sec", "company-reports", accessionNumber]
397
427
  });
398
428
  }
399
- getForPeriod({ ticker, cik, fiscalYear, fiscalPeriod }) {
429
+ get({ ticker, cik, fiscalYear, fiscalPeriod }) {
400
430
  return this.transport.request({
401
431
  path: ["v1", "companies", "reports"],
402
432
  query: { ticker, cik, fiscal_year: fiscalYear, fiscal_period: fiscalPeriod }
@@ -417,6 +447,24 @@ var CompanyReports = class {
417
447
  });
418
448
  }
419
449
  };
450
+ var CurrentReports = class {
451
+ constructor(transport) {
452
+ this.transport = transport;
453
+ }
454
+ transport;
455
+ list({ from, until, cik, forms, items, cursor, limit }) {
456
+ return this.transport.request({
457
+ path: ["v1", "sec", "current-reports"],
458
+ query: { from, until, cik, forms: commaSeparated(forms), items: commaSeparated(items), cursor, limit }
459
+ });
460
+ }
461
+ get({ accessionNumber }) {
462
+ return this.transport.request({ path: ["v1", "sec", "current-reports", accessionNumber] });
463
+ }
464
+ getHtml({ accessionNumber }) {
465
+ return this.transport.request({ path: ["v1", "sec", "current-reports", accessionNumber, "content.html"], responseType: "text" });
466
+ }
467
+ };
420
468
  var FinancialStatements = class {
421
469
  constructor(transport) {
422
470
  this.transport = transport;
@@ -450,6 +498,7 @@ var InsiderTransactions = class {
450
498
  limit,
451
499
  until,
452
500
  tickers,
501
+ ciks,
453
502
  transactionCodes
454
503
  }) {
455
504
  return this.transport.request({
@@ -459,25 +508,7 @@ var InsiderTransactions = class {
459
508
  from,
460
509
  limit,
461
510
  tickers: commaSeparated(tickers),
462
- transaction_codes: commaSeparated(transactionCodes),
463
- until
464
- }
465
- });
466
- }
467
- listForCompany({
468
- cursor,
469
- ticker,
470
- from,
471
- limit,
472
- until,
473
- transactionCodes
474
- }) {
475
- return this.transport.request({
476
- path: ["v1", "companies", "US", ticker, "insider-transactions"],
477
- query: {
478
- cursor,
479
- from,
480
- limit,
511
+ ciks: commaSeparated(ciks),
481
512
  transaction_codes: commaSeparated(transactionCodes),
482
513
  until
483
514
  }
@@ -487,6 +518,7 @@ var InsiderTransactions = class {
487
518
  from,
488
519
  until,
489
520
  tickers,
521
+ ciks,
490
522
  transactionCodes,
491
523
  limit
492
524
  }) {
@@ -496,27 +528,7 @@ var InsiderTransactions = class {
496
528
  from,
497
529
  ...until === void 0 ? {} : { until },
498
530
  ...tickers === void 0 ? {} : { tickers },
499
- ...transactionCodes === void 0 ? {} : { transactionCodes },
500
- ...limit === void 0 ? {} : { limit },
501
- ...cursor === void 0 ? {} : { cursor }
502
- });
503
- yield* page.transactions;
504
- cursor = page.next_cursor ?? void 0;
505
- } while (cursor !== void 0);
506
- }
507
- async *iterateForCompany({
508
- ticker,
509
- from,
510
- until,
511
- transactionCodes,
512
- limit
513
- }) {
514
- let cursor;
515
- do {
516
- const page = await this.listForCompany({
517
- ticker,
518
- from,
519
- ...until === void 0 ? {} : { until },
531
+ ...ciks === void 0 ? {} : { ciks },
520
532
  ...transactionCodes === void 0 ? {} : { transactionCodes },
521
533
  ...limit === void 0 ? {} : { limit },
522
534
  ...cursor === void 0 ? {} : { cursor }
@@ -549,7 +561,8 @@ var ProposedSales = class {
549
561
  from,
550
562
  limit,
551
563
  until,
552
- tickers
564
+ tickers,
565
+ ciks
553
566
  }) {
554
567
  return this.transport.request({
555
568
  path: ["v1", "proposed-sales"],
@@ -558,26 +571,16 @@ var ProposedSales = class {
558
571
  from,
559
572
  limit,
560
573
  tickers: commaSeparated(tickers),
574
+ ciks: commaSeparated(ciks),
561
575
  until
562
576
  }
563
577
  });
564
578
  }
565
- listForCompany({
566
- cursor,
567
- ticker,
568
- from,
569
- limit,
570
- until
571
- }) {
572
- return this.transport.request({
573
- path: ["v1", "companies", "US", ticker, "proposed-sales"],
574
- query: { cursor, from, limit, until }
575
- });
576
- }
577
579
  async *iterate({
578
580
  from,
579
581
  until,
580
582
  tickers,
583
+ ciks,
581
584
  limit
582
585
  }) {
583
586
  let cursor;
@@ -586,25 +589,7 @@ var ProposedSales = class {
586
589
  from,
587
590
  ...until === void 0 ? {} : { until },
588
591
  ...tickers === void 0 ? {} : { tickers },
589
- ...limit === void 0 ? {} : { limit },
590
- ...cursor === void 0 ? {} : { cursor }
591
- });
592
- yield* page.proposed_sales;
593
- cursor = page.next_cursor ?? void 0;
594
- } while (cursor !== void 0);
595
- }
596
- async *iterateForCompany({
597
- ticker,
598
- from,
599
- until,
600
- limit
601
- }) {
602
- let cursor;
603
- do {
604
- const page = await this.listForCompany({
605
- ticker,
606
- from,
607
- ...until === void 0 ? {} : { until },
592
+ ...ciks === void 0 ? {} : { ciks },
608
593
  ...limit === void 0 ? {} : { limit },
609
594
  ...cursor === void 0 ? {} : { cursor }
610
595
  });
@@ -789,6 +774,7 @@ function commaSeparated(values) {
789
774
  var Chadwin = class {
790
775
  companies;
791
776
  companyReports;
777
+ currentReports;
792
778
  feeds;
793
779
  financialStatements;
794
780
  insiderFilings;
@@ -806,6 +792,7 @@ var Chadwin = class {
806
792
  });
807
793
  this.companies = new Companies(transport);
808
794
  this.companyReports = new CompanyReports(transport);
795
+ this.currentReports = new CurrentReports(transport);
809
796
  this.feeds = new Feeds(transport);
810
797
  this.financialStatements = new FinancialStatements(transport);
811
798
  this.insiderFilings = new InsiderFilings(transport);
@@ -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 CompanyReportFiscalPeriod,\n CompanyReportForm,\n CompanySelector,\n FinancialStatementsGetParams,\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<\"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 CompanySelector,\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\", \"search\"],\n query: { query },\n });\n }\n\n get({ ticker, cik }: CompanySelector): PromiseWithResponse<JsonResponse<\"getCompany\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\"],\n query: { ticker, cik },\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 getForPeriod({ ticker, cik, fiscalYear, fiscalPeriod }: CompanySelector & {\n fiscalYear: number;\n fiscalPeriod: CompanyReportFiscalPeriod;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReportsForPeriod\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"reports\"],\n query: { ticker, cik, fiscal_year: fiscalYear, fiscal_period: fiscalPeriod },\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 cik,\n fiscalYear,\n years,\n }: FinancialStatementsGetParams): PromiseWithResponse<\n JsonResponse<\"getCompanyFinancialStatements\">\n > {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"financial-statements\"],\n query: {\n ticker,\n cik,\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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMO,IAAM,WAAN,cAAuB,MAAM;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAAiB,UAA2B,CAAC,GAAG;AAC1D,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS,QAAQ;AACtB,SAAK,OAAO,QAAQ;AACpB,SAAK,UAAU,QAAQ;AAAA,EACzB;AACF;;;ACdO,SAAS,0BACd,UACwB;AACxB,QAAM,UAAU,SAAS,KAAK,CAAC,EAAE,KAAK,MAAM,IAAI;AAEhD,SAAO,eAAe,SAAS,gBAAgB;AAAA,IAC7C,OAAO,MAAM;AAAA,EACf,CAAC;AAID,OAAK,QAAQ,MAAM,MAAM,MAAS;AAClC,SAAO;AACT;;;ACXO,IAAM,qBAAqB;AAC3B,IAAM,cAAc;AACpB,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAElC,IAAM,sBAAsB;AAC5B,IAAM,2BACJ;AACF,IAAM,kBAAkB;AA2BxB,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACjC,YAAqB,UAAmB;AACtC,UAAM,WAAW,sBAAsB,wBAAwB;AAD5C;AAAA,EAErB;AAAA,EAFqB;AAGvB;AAEO,IAAM,gBAAN,MAAoB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAA+B;AACzC,SAAK,UAAU,QAAQ;AACvB,SAAK,WAAW,iBAAiB,QAAQ,WAAW,mBAAmB;AACvE,SAAK,SAAS,QAAQ,UAAU,CAAC,OAAO,SAAS,WAAW,MAAM,OAAO,IAAI;AAAA,EAC/E;AAAA,EAEA,QAAW,SAAmD;AAC5D,WAAO,0BAA0B,KAAK,gBAAmB,OAAO,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,gBACJ,SAC0C;AAC1C,UAAM,MAAM,SAAS,KAAK,UAAU,OAAO;AAC3C,QAAI,wBAAwB;AAE5B,aAAS,UAAU,GAAG,WAAW,aAAa,WAAW,GAAG;AAC1D,UAAI;AACJ,UAAI;AACF,iBAAS,MAAM,KAAK,SAAY,KAAK,QAAQ,gBAAgB,MAAM;AAAA,MACrE,SAAS,OAAO;AACd,YAAI,iBAAiB,UAAU;AAC7B,gBAAM;AAAA,QACR;AACA,YAAI,EAAE,iBAAiB,iBAAiB;AACtC,gBAAM,IAAI,SAAS,oBAAoB;AAAA,QACzC;AACA,gCAAwB,MAAM;AAC9B,YAAI,YAAY,aAAa;AAC3B,gBAAM,IAAI;AAAA,YACR,wBACI,0BACA;AAAA,UACN;AAAA,QACF;AACA,cAAM,KAAK,aAAa,OAAO,CAAC;AAChC;AAAA,MACF;AAEA,UAAI,UAAU,QAAQ;AACpB,eAAO;AAAA,MACT;AAEA,UAAI,YAAY,OAAO,SAAS,QAAQ,OAAO,IAAI,KAAK,UAAU,aAAa;AAC7E,cAAM,KAAK,WAAW,OAAO,UAAU,OAAO,CAAC;AAC/C;AAAA,MACF;AAEA,YAAM,kBAAkB,OAAO,UAAU,OAAO,MAAM,KAAK,OAAO;AAAA,IACpE;AAEA,UAAM,IAAI;AAAA,MACR,wBAAwB,0BAA0B;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,KACA,cACiE;AACjE,UAAM,aAAa,IAAI,gBAAgB;AACvC,QAAI,WAAW;AACf,UAAM,UAAU,WAAW,MAAM;AAC/B,iBAAW;AACX,iBAAW,MAAM;AAAA,IACnB,GAAG,kBAAkB;AAErB,QAAI;AACF,UAAI;AACJ,UAAI;AACF,mBAAW,MAAM,KAAK,OAAO,KAAK;AAAA,UAChC,SAAS;AAAA,YACP,eAAe,UAAU,KAAK,OAAO;AAAA,UACvC;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ,WAAW;AAAA,QACrB,CAAC;AAAA,MACH,QAAQ;AACN,cAAM,IAAI,eAAe,QAAQ;AAAA,MACnC;AAEA,UAAI,CAAC,SAAS,IAAI;AAChB,eAAO;AAAA,UACL,MAAM,MAAM,cAAc,UAAU,KAAK,OAAO;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAEA,UAAI;AACF,cAAM,OACJ,iBAAiB,SACb,MAAM,SAAS,KAAK,IACpB,MAAM,SAAS,KAAK;AAC1B,eAAO,EAAE,MAAiB,SAAS;AAAA,MACrC,SAAS,OAAO;AACd,YAAI,iBAAiB,UAAU,iBAAiB,aAAa;AAC3D,gBAAM,IAAI,SAAS,yCAAyC;AAAA,YAC1D,SAAS,iBAAiB,SAAS,SAAS,KAAK,OAAO;AAAA,YACxD,QAAQ,SAAS;AAAA,UACnB,CAAC;AAAA,QACH;AACA,cAAM,IAAI,SAAS,yCAAyC;AAAA,UAC1D,SAAS,iBAAiB,SAAS,SAAS,KAAK,OAAO;AAAA,UACxD,QAAQ,SAAS;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF,UAAE;AACA,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,OAAe;AACvC,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,KAAK;AAAA,EACrB,QAAQ;AACN,UAAM,IAAI,UAAU,wBAAwB;AAAA,EAC9C;AACA,MACG,IAAI,aAAa,WAAW,IAAI,aAAa,YAC9C,IAAI,YACJ,IAAI,YACJ,IAAI,SAAS,GAAG,IAAI,MAAM,GAAG,IAAI,QAAQ,IACzC;AACA,UAAM,IAAI,UAAU,wBAAwB;AAAA,EAC9C;AACA,MAAI,WAAW,GAAG,IAAI,SAAS,QAAQ,QAAQ,EAAE,CAAC;AAClD,SAAO;AACT;AAEA,SAAS,SAAS,SAAc,SAA2B;AACzD,QAAM,OAAO,QAAQ,KAAK,IAAI,CAAC,YAAY,mBAAmB,OAAO,CAAC,EAAE,KAAK,GAAG;AAChF,QAAM,MAAM,IAAI,IAAI,MAAM,OAAO;AACjC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,SAAS,CAAC,CAAC,GAAG;AAC9D,QAAI,UAAU,UAAa,UAAU,KAAM;AAC3C,UAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,eAAW,SAAS,QAAQ;AAC1B,UAAI,aAAa,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,IAC5C;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,cAAc,UAAoB,QAAgB;AAC/D,MAAI;AACF,UAAM,OAAgB,MAAM,SAAS,KAAK;AAC1C,QACE,SAAS,QACT,OAAO,SAAS,YAChB,WAAW,QACX,OAAO,KAAK,UAAU,YACtB,KAAK,UAAU,UACf,gBAAgB,KAAK,KAAK,KAAK,GAC/B;AACA,aAAO,KAAK;AAAA,IACd;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAEA,SAAS,YAAY,QAAgB,MAA0B;AAC7D,MAAI,SAAS,gCAAiC,QAAO;AACrD,SACE,SAAS,kBACT,WAAW,OACX,WAAW,OACX,WAAW;AAEf;AAEA,SAAS,WAAW,UAAoB,OAAe;AACrD,QAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;AACrD,MAAI,eAAe,KAAM,QAAO,aAAa,KAAK;AAElD,QAAM,UAAU,OAAO,UAAU;AACjC,MAAI,OAAO,SAAS,OAAO,KAAK,WAAW,GAAG;AAC5C,WAAO,KAAK,IAAI,UAAU,KAAO,kBAAkB;AAAA,EACrD;AAEA,QAAM,OAAO,KAAK,MAAM,UAAU;AAClC,MAAI,CAAC,OAAO,MAAM,IAAI,GAAG;AACvB,WAAO,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,KAAK,IAAI,CAAC,GAAG,kBAAkB;AAAA,EACpE;AAEA,SAAO,aAAa,KAAK;AAC3B;AAEA,SAAS,aAAa,OAAe;AACnC,SAAO,KAAK,IAAI,sBAAsB,KAAK,OAAO,kBAAkB;AACtE;AAEA,SAAS,KAAK,cAAsB;AAClC,SAAO,IAAI,QAAc,CAAC,YAAY,WAAW,SAAS,YAAY,CAAC;AACzE;AAEA,SAAS,kBACP,UACA,MACA,QACA;AACA,QAAM,SAAS,OAAO,KAAK,IAAI,MAAM;AACrC,SAAO,IAAI;AAAA,IACT,kCAAkC,SAAS,MAAM,GAAG,MAAM;AAAA,IAC1D;AAAA,MACE,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,KAAK;AAAA,MACrC,SAAS,iBAAiB,SAAS,SAAS,MAAM;AAAA,MAClD,QAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAAkB,QAAgB;AAC1D,QAAM,OAAO,IAAI,QAAQ;AACzB,aAAW,CAAC,MAAM,KAAK,KAAK,SAAS;AACnC,UAAM,iBAAiB,KAAK,YAAY;AACxC,QACE,mBAAmB,mBACnB,mBAAmB,YACnB,mBAAmB,yBACnB,mBAAmB,gBACnB,MAAM,SAAS,MAAM,GACrB;AACA;AAAA,IACF;AACA,SAAK,OAAO,MAAM,KAAK;AAAA,EACzB;AACA,SAAO;AACT;;;AChRO,IAAM,QAAN,MAAY;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,WAA0B;AACpC,SAAK,iBAAiB,IAAI,kBAAkB,SAAS;AACrD,SAAK,kBAAkB,IAAI,oBAAoB,SAAS;AACxD,SAAK,sBAAsB,IAAI,uBAAuB,SAAS;AAC/D,SAAK,uBAAuB,IAAI,wBAAwB,SAAS;AAAA,EACnE;AACF;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACtB,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,WACE,UAAoC,CAAC,GACuB;AAC5D,WAAO,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EAClC;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,GAE+D;AAC7D,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,aACE,UAAoC,CAAC,GACuB;AAC5D,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,SACE,SACA,MAC4D;AAC5D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,mBAAmB,MAAM;AAAA,MACtC,OAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,QAC9B,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,sBAAN,MAA0B;AAAA,EACxB,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,WACE,UAAsC,CAAC,GACuB;AAC9D,WAAO,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EAClC;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,GAEiE;AAC/D,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,aACE,UAAsC,CAAC,GACuB;AAC9D,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,SACE,SACA,MAC8D;AAC9D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,oBAAoB,MAAM;AAAA,MACvC,OAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,QAC9B,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,yBAAN,MAA6B;AAAA,EAC3B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,WACE,UAAyC,CAAC,GACuB;AACjE,WAAO,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EAClC;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,GAEoE;AAClE,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,aACE,UAAyC,CAAC,GACuB;AACjE,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,SACE,SACA,MACiE;AACjE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,wBAAwB,MAAM;AAAA,MAC3C,OAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,QAAQ;AAAA,QACf,mBAAmB,QAAQ,kBAAkB,KAAK,GAAG;AAAA,MACvD;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,0BAAN,MAA8B;AAAA,EAC5B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,WACE,UAA0C,CAAC,GACuB;AAClE,WAAO,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EAClC;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,GAEqE;AACnE,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,aACE,UAA0C,CAAC,GACuB;AAClE,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,SACE,SACA,MACkE;AAClE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,yBAAyB,MAAM;AAAA,MAC5C,OAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,QAC9B,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACrKO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,OAAO,EAAE,MAAM,GAA4E;AACzF,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,QAAQ;AAAA,MAClC,OAAO,EAAE,MAAM;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,EAAE,QAAQ,IAAI,GAAqE;AACrF,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,WAAW;AAAA,MACxB,OAAO,EAAE,QAAQ,IAAI;AAAA,IACvB,CAAC;AAAA,EACH;AACF;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,IAAI;AAAA,IACF;AAAA,EACF,GAE6D;AAC3D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,OAAO,mBAAmB,eAAe;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EAEA,aAAa,EAAE,QAAQ,KAAK,YAAY,aAAa,GAGe;AAClE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,SAAS;AAAA,MACnC,OAAO,EAAE,QAAQ,KAAK,aAAa,YAAY,eAAe,aAAa;AAAA,IAC7E,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;AAAA,IACN;AAAA,EACF,GAEoE;AAClE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACF;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AACA,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,sBAAsB;AAAA,MAChD,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,KAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOiE;AAC/D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,sBAAsB;AAAA,MACnC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,eAAe,OAAO;AAAA,QAC/B,mBAAmB,eAAe,gBAAgB;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOwE;AACtE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,MAAM,QAAQ,sBAAsB;AAAA,MAC9D,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAmB,eAAe,gBAAgB;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQE;AACA,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,KAAK;AAAA,QAC3B;AAAA,QACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,QAAQ;AAAA,QAC3C,GAAI,qBAAqB,SAAY,CAAC,IAAI,EAAE,iBAAiB;AAAA,QAC7D,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MAC3C,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQE;AACA,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,eAAe;AAAA,QACrC;AAAA,QACA;AAAA,QACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,qBAAqB,SAAY,CAAC,IAAI,EAAE,iBAAiB;AAAA,QAC7D,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MAC3C,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AACF;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,IAAI;AAAA,IACF;AAAA,EACF,GAE6D;AAC3D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,OAAO,mBAAmB,eAAe;AAAA,IACxD,CAAC;AAAA,EACH;AACF;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,KAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAM2D;AACzD,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,gBAAgB;AAAA,MAC7B,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,eAAe,OAAO;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMkE;AAChE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,MAAM,QAAQ,gBAAgB;AAAA,MACxD,OAAO,EAAE,QAAQ,MAAM,OAAO,MAAM;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOE;AACA,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,KAAK;AAAA,QAC3B;AAAA,QACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,QAAQ;AAAA,QAC3C,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MAC3C,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOE;AACA,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,eAAe;AAAA,QACrC;AAAA,QACA;AAAA,QACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MAC3C,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,EACF,GAEkE;AAChE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,OAAO,yBAAyB,eAAe;AAAA,IAC9D,CAAC;AAAA,EACH;AACF;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,IAAI;AAAA,IACF;AAAA,EACF,GAEmE;AACjE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,OAAO,yBAAyB,eAAe;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EAEA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI4E;AAC1E,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,QAAQ,MAAM;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,gBAAgB;AAAA,IACrB;AAAA,IACA;AAAA,EACF,GAGyC;AACvC,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,aAAa;AAAA,QACnC;AAAA,QACA,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AACF;AAEO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,OAAO;AAAA,IACL;AAAA,EACF,GAEqE;AACnE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,QAAQ;AAAA,MAC/C,OAAO,EAAE,MAAM;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,KAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAKI,CAAC,GAAmE;AACtE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,wBAAwB;AAAA,MACrC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,sBAAsB;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,IAAI;AAAA,IACF;AAAA,EACF,GAEiE;AAC/D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,iBAAiB;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAEA,YAAY;AAAA,IACV;AAAA,EACF,GAEyE;AACvE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,mBAAmB,SAAS;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EAEA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAK0E;AACxE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,mBAAmB,UAAU;AAAA,MACpE,OAAO,EAAE,QAAQ,OAAO,OAAO;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAK2E;AACzE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,mBAAmB,WAAW;AAAA,MACrE,OAAO,EAAE,QAAQ,OAAO,OAAO;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,gBAAgB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAII,CAAC,GAAyC;AAC5C,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,KAAK;AAAA,QAC3B,GAAI,QAAQ,SAAY,CAAC,IAAI,EAAE,IAAI;AAAA,QACnC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,sBAAsB,SAAY,CAAC,IAAI,EAAE,kBAAkB;AAAA,QAC/D,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,gBAAgB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIyC;AACvC,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,aAAa;AAAA,QACnC;AAAA,QACA;AAAA,QACA,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI0C;AACxC,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,cAAc;AAAA,QACpC;AAAA,QACA;AAAA,QACA,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AACF;AAEA,SAAS,eAAe,QAAuC;AAC7D,SAAO,QAAQ,KAAK,GAAG;AACzB;;;ACvhBO,IAAM,UAAN,MAAc;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAAwB;AAClC,QACE,CAAC,WACD,OAAO,QAAQ,WAAW,YAC1B,QAAQ,OAAO,KAAK,EAAE,WAAW,GACjC;AACA,YAAM,IAAI,UAAU,yCAAyC;AAAA,IAC/D;AAEA,UAAM,YAAY,IAAI,cAAc;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,GAAI,QAAQ,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,QAAQ,QAAQ;AAAA,IACtE,CAAC;AACD,SAAK,YAAY,IAAI,UAAU,SAAS;AACxC,SAAK,iBAAiB,IAAI,eAAe,SAAS;AAClD,SAAK,QAAQ,IAAI,MAAM,SAAS;AAChC,SAAK,sBAAsB,IAAI,oBAAoB,SAAS;AAC5D,SAAK,iBAAiB,IAAI,eAAe,SAAS;AAClD,SAAK,sBAAsB,IAAI,oBAAoB,SAAS;AAC5D,SAAK,uBAAuB,IAAI,qBAAqB,SAAS;AAC9D,SAAK,wBAAwB,IAAI,sBAAsB,SAAS;AAChE,SAAK,gBAAgB,IAAI,cAAc,SAAS;AAAA,EAClD;AACF;","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 CompanyReportFiscalPeriod,\n CompanyReportForm,\n CurrentReport,\n CurrentReportForm,\n CurrentReportFeedFamily,\n CurrentReportFeedFilters,\n CurrentReportFeedPage,\n CurrentReportListParams,\n CurrentReportPage,\n CompanySelector,\n FinancialStatementsGetParams,\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 CurrentReportFeedFilters,\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 currentReports: CurrentReportFeed;\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.currentReports = new CurrentReportFeed(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 CurrentReportFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: CurrentReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCurrentReportFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: CurrentReportFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listCurrentReportFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: CurrentReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCurrentReportFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: CurrentReportFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listCurrentReportFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"current-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 CurrentReportListParams,\n CompanySelector,\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\", \"search\"],\n query: { query },\n });\n }\n\n get({ ticker, cik }: CompanySelector): PromiseWithResponse<JsonResponse<\"getCompany\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\"],\n query: { ticker, cik },\n });\n }\n}\n\nexport class CompanyReports {\n constructor(private readonly transport: HttpTransport) {}\n\n getByAccession({\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 get({ ticker, cik, fiscalYear, fiscalPeriod }: CompanySelector & {\n fiscalYear: number;\n fiscalPeriod: CompanyReportFiscalPeriod;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReportsForPeriod\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"reports\"],\n query: { ticker, cik, fiscal_year: fiscalYear, fiscal_period: fiscalPeriod },\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 CurrentReports {\n constructor(private readonly transport: HttpTransport) {}\n\n list({ from, until, cik, forms, items, cursor, limit }: CurrentReportListParams): PromiseWithResponse<JsonResponse<\"listCurrentReports\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"current-reports\"],\n query: { from, until, cik, forms: commaSeparated(forms), items: commaSeparated(items), cursor, limit },\n });\n }\n\n get({ accessionNumber }: { accessionNumber: string }): PromiseWithResponse<JsonResponse<\"getCurrentReport\">> {\n return this.transport.request({ path: [\"v1\", \"sec\", \"current-reports\", accessionNumber] });\n }\n\n getHtml({ accessionNumber }: { accessionNumber: string }): PromiseWithResponse<TextResponse<\"getCurrentReportHtml\">> {\n return this.transport.request({ path: [\"v1\", \"sec\", \"current-reports\", accessionNumber, \"content.html\"], responseType: \"text\" });\n }\n}\n\nexport class FinancialStatements {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n ticker,\n cik,\n fiscalYear,\n years,\n }: FinancialStatementsGetParams): PromiseWithResponse<\n JsonResponse<\"getCompanyFinancialStatements\">\n > {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"financial-statements\"],\n query: {\n ticker,\n cik,\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 ciks,\n transactionCodes,\n }: {\n cursor?: string;\n from: string;\n limit?: number;\n until?: string;\n tickers?: string[];\n ciks?: 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 ciks: commaSeparated(ciks),\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n\n\n async *iterate({\n from,\n until,\n tickers,\n ciks,\n transactionCodes,\n limit,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n ciks?: 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 ...(ciks === undefined ? {} : { ciks }),\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}\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 ciks,\n }: {\n cursor?: string;\n from: string;\n limit?: number;\n until?: string;\n tickers?: string[];\n ciks?: 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 ciks: commaSeparated(ciks),\n until,\n },\n });\n }\n\n\n async *iterate({\n from,\n until,\n tickers,\n ciks,\n limit,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n ciks?: 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 ...(ciks === undefined ? {} : { ciks }),\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\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 CurrentReports,\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 currentReports: CurrentReports;\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.currentReports = new CurrentReports(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":[]}