sentisense 0.20.0 → 0.23.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.d.mts CHANGED
@@ -196,7 +196,9 @@ interface StoryCluster {
196
196
  }
197
197
  interface Story {
198
198
  cluster: StoryCluster;
199
+ /** Human-formatted labels for display, e.g. `"Apple Inc (AAPL)"`. For display only; do not parse symbols out of these. Use `tickers` programmatically. */
199
200
  displayTickers: string[];
201
+ /** Bare ticker symbols for programmatic use, e.g. `"AAPL"`. Use these to filter or look up stocks. */
200
202
  tickers: string[];
201
203
  primaryEntityNames: string[];
202
204
  impactScore: number;
@@ -440,9 +442,53 @@ interface GetPoliticiansOptions {
440
442
  lookbackDays?: number;
441
443
  }
442
444
  /** Generic preview wrapper used by PRO-gated endpoints. */
445
+ interface EarningsEvent {
446
+ ticker: string;
447
+ companyName: string;
448
+ /** Report date, ISO calendar day "YYYY-MM-DD". */
449
+ earningsDate: string;
450
+ /** Session timing. */
451
+ earningsTime: "before_open" | "after_close" | "during_market" | "unknown";
452
+ /** Fiscal period label (e.g. "Q2 2026"), nullable. */
453
+ fiscalQuarter: string | null;
454
+ /** Whether the company has confirmed the date (vs. estimated/projected). */
455
+ confirmed: boolean;
456
+ /** Consensus EPS estimate, nullable. */
457
+ estimatedEps: number | null;
458
+ }
459
+ interface CalendarMeta {
460
+ /** When the snapshot was generated, epoch seconds. */
461
+ generatedAt: number | null;
462
+ /** First day covered, ISO "YYYY-MM-DD". */
463
+ windowStart: string | null;
464
+ /** Last day covered, ISO "YYYY-MM-DD". */
465
+ windowEnd: string | null;
466
+ /** Number of events in this response. */
467
+ count: number;
468
+ /** Always "sentisense". */
469
+ source: string;
470
+ }
471
+ interface EarningsCalendarResponse {
472
+ earnings: EarningsEvent[];
473
+ metadata: CalendarMeta;
474
+ }
475
+ interface GetEarningsCalendarOptions {
476
+ /** Filter to a single ticker. */
477
+ ticker?: string;
478
+ /** Shorthand window: "this" (current Mon-Sun) or "next". */
479
+ week?: "this" | "next";
480
+ /** Inclusive lower date bound, ISO "YYYY-MM-DD". Overrides `week`. */
481
+ from?: string;
482
+ /** Inclusive upper date bound, ISO "YYYY-MM-DD". */
483
+ to?: string;
484
+ /** When true, only company-confirmed dates. */
485
+ confirmed?: boolean;
486
+ /** Session filter. */
487
+ time?: "before_open" | "after_close" | "during_market" | "unknown";
488
+ }
443
489
  interface PreviewResponse<T> {
444
490
  isPreview: boolean;
445
- previewReason: "LOGIN_REQUIRED" | "PRO_REQUIRED" | null;
491
+ previewReason: "PRO_REQUIRED" | null;
446
492
  /**
447
493
  * Number of items in the full PRO dataset, before preview truncation.
448
494
  * Present on preview (free-tier) list responses so callers can show
@@ -553,7 +599,7 @@ interface LockedInsight {
553
599
  /** Preview response returned to free/unauthenticated users on insights endpoints. */
554
600
  interface InsightPreviewResponse {
555
601
  isPreview: true;
556
- previewReason: "LOGIN_REQUIRED" | "PRO_REQUIRED";
602
+ previewReason: "PRO_REQUIRED";
557
603
  /** Full insight objects for the top N results. */
558
604
  insights: Insight[];
559
605
  /** Metadata-only entries for the remaining signals. */
@@ -631,6 +677,161 @@ interface KBEntity {
631
677
  name: string;
632
678
  [key: string]: unknown;
633
679
  }
680
+ /** Per-tracker discovery row returned by `client.trackers.list()`. */
681
+ interface TrackerListing {
682
+ trackerId: string;
683
+ displayName: string;
684
+ /** Coarse grouping for hub filtering: `"institutional"`, `"epidemiology"`, etc. */
685
+ category: string;
686
+ /** Sentence-long subtitle for hub cards + API discovery. */
687
+ description: string;
688
+ /** Renderer hint: `"table"`, `"choropleth"`, `"timeseries"`, `"heatmap"`. */
689
+ viewType: string;
690
+ /** Access tier: `"free"` or `"pro"`. A `pro` tracker truncates to a free preview for FREE callers; a `free` tracker returns the full snapshot to everyone. */
691
+ accessTier?: string;
692
+ /** Fragment on `/methodology` explaining the tracker (e.g. `"#institution-rankings"`). */
693
+ methodologyAnchor: string;
694
+ /** Expected snapshot refresh cadence, in seconds. Informational. */
695
+ refreshIntervalSeconds: number;
696
+ /** Canonical detail URL (e.g. `"/api/v1/trackers/institution-concentration"`). */
697
+ canonicalUrl: string;
698
+ }
699
+ /** Discovery envelope returned by `client.trackers.list()`. */
700
+ interface TrackerListResponse {
701
+ trackers: TrackerListing[];
702
+ }
703
+ /** One row of a `viewType: "table"` tracker — a ranked leaderboard cell. */
704
+ interface TrackerTableRow {
705
+ /** 1-based rank on the sort the tracker is built for; may be null. */
706
+ rank: number | null;
707
+ /** Stable identifier for the entity (CIK, ticker, etc.). */
708
+ rowId: string;
709
+ /** Display name. */
710
+ name: string;
711
+ /** Optional category tag (e.g. `"HEDGE_FUND"`). */
712
+ category: string | null;
713
+ /** Optional canonical link to the entity behind the row (e.g. `"/institutions/Berkshire-Hathaway"`). */
714
+ url: string | null;
715
+ /** Per-cell metric values; each carries its own label and unit. */
716
+ metrics: TrackerMetricValue[];
717
+ }
718
+ /**
719
+ * A labeled quantitative reading attached to a row, geo region, or
720
+ * time-series point. `value` is `unknown` because it can be a number or a
721
+ * status string ("Severe", "Resolved") without forcing a separate type.
722
+ */
723
+ interface TrackerMetricValue {
724
+ label: string;
725
+ value: unknown;
726
+ unit?: string | null;
727
+ trend?: string | null;
728
+ /** Primary-source URL for this cell's value, when the tracker is citation-backed. */
729
+ sourceUrl?: string | null;
730
+ /** Short quote from the primary source supporting this cell's value. */
731
+ sourceQuote?: string | null;
732
+ /** The period this cell refers to (e.g. "2025", "2026-YTD"), when it varies per row. */
733
+ periodLabel?: string | null;
734
+ }
735
+ /** Top-of-page stat tile. A tracker may have 0–N headline metrics. */
736
+ interface TrackerHeadlineMetric {
737
+ label: string;
738
+ value: unknown;
739
+ unit?: string | null;
740
+ asOf?: string | null;
741
+ methodologyNote?: string | null;
742
+ trend?: string | null;
743
+ }
744
+ /** One geographic row for a `viewType: "choropleth"` tracker. */
745
+ interface TrackerGeoEntry {
746
+ geoId?: string | null;
747
+ /** Two-letter ISO country code, when applicable. */
748
+ isoCode?: string | null;
749
+ /** FIPS code with leading zeros preserved (e.g. `"06"`), when applicable. */
750
+ fips?: string | null;
751
+ name: string;
752
+ metrics: TrackerMetricValue[];
753
+ lastEvent?: {
754
+ date?: string;
755
+ url?: string;
756
+ summary?: string;
757
+ } | null;
758
+ }
759
+ /** One point on a time series for a `viewType: "timeseries"` tracker. */
760
+ interface TrackerTimeSeriesPoint {
761
+ /** Free-form date string; trackers pick the granularity. */
762
+ date: string;
763
+ label?: string | null;
764
+ values: TrackerMetricValue[];
765
+ }
766
+ /** A notable event (outbreak, disruption, enforcement action). */
767
+ interface TrackerEvent {
768
+ id: string;
769
+ title: string;
770
+ status: string;
771
+ asOf?: string | null;
772
+ severity?: string | null;
773
+ geoIds?: string[] | null;
774
+ metrics?: TrackerMetricValue[] | null;
775
+ summary?: string | null;
776
+ sources?: TrackerSourceRef[] | null;
777
+ }
778
+ /** Recent news/alert signal. `tier`: 1=authoritative, 2=secondary, 3=mainstream press. */
779
+ interface TrackerSignal {
780
+ tier?: number | null;
781
+ source: string;
782
+ publishedAt: string;
783
+ url: string;
784
+ summary?: string | null;
785
+ }
786
+ /** Citation reference. */
787
+ interface TrackerSourceRef {
788
+ name: string;
789
+ url: string;
790
+ date?: string | null;
791
+ }
792
+ /**
793
+ * Standardized envelope every tracker returns. Exactly one of the payload
794
+ * fields (`rows`, `geo`, `timeSeries`) is populated based on `viewType`;
795
+ * `headline`, `events`, `signals`, `sources`, and `narrative` are
796
+ * companion fields that may appear on any tracker.
797
+ */
798
+ interface TrackerSnapshot {
799
+ trackerId: string;
800
+ /** Optional sub-scope (e.g. `"us"` for hantavirus). Null for unscoped trackers. */
801
+ scope?: string | null;
802
+ schemaVersion: string;
803
+ displayName: string;
804
+ description?: string | null;
805
+ /** Renderer hint: `"table"`, `"choropleth"`, `"timeseries"`, `"heatmap"`. */
806
+ viewType: string;
807
+ /** Free-form "data as of" label (typically a quarter, date, or week). */
808
+ asOf?: string | null;
809
+ generatedAt?: string | null;
810
+ generatedBy?: string | null;
811
+ /** Optional Markdown narrative. */
812
+ narrative?: string | null;
813
+ headline?: TrackerHeadlineMetric[] | null;
814
+ geo?: TrackerGeoEntry[] | null;
815
+ timeSeries?: TrackerTimeSeriesPoint[] | null;
816
+ /** Populated when `viewType === "table"`. */
817
+ rows?: TrackerTableRow[] | null;
818
+ events?: TrackerEvent[] | null;
819
+ signals?: TrackerSignal[] | null;
820
+ sources?: TrackerSourceRef[] | null;
821
+ }
822
+ /**
823
+ * Wire response from `client.trackers.get()`. The snapshot is at `.data`;
824
+ * for FREE callers on a PRO-gated tracker, `isPreview` is `true`, `data`
825
+ * carries a truncated row set, and `totalCount` reports the full set size.
826
+ */
827
+ interface TrackerSnapshotResponse {
828
+ isPreview: boolean;
829
+ /** `"PRO_REQUIRED"` for FREE callers on a gated tracker; otherwise `null`. */
830
+ previewReason: "PRO_REQUIRED" | null;
831
+ /** Full row count before truncation. Only set on preview responses. */
832
+ totalCount?: number;
833
+ data: TrackerSnapshot;
834
+ }
634
835
 
635
836
  interface AnalystConsensus {
636
837
  ticker: string;
@@ -717,6 +918,20 @@ declare class Analyst {
717
918
  marketActivity(options?: GetAnalystMarketActivityOptions): Promise<PreviewResponse<AnalystAction[]>>;
718
919
  }
719
920
 
921
+ declare class Calendar {
922
+ private client;
923
+ constructor(client: APIClient);
924
+ /**
925
+ * Upcoming company earnings, sorted by date.
926
+ *
927
+ * Key-required. A FREE key returns the current week (`isPreview: true`); a PRO
928
+ * key returns the full forward window (about 30 days). Field richness is
929
+ * identical across tiers: the gate is how far ahead you can see, not which
930
+ * columns you get. On a preview, `totalCount` is the full-window event count.
931
+ */
932
+ getEarnings(options?: GetEarningsCalendarOptions): Promise<PreviewResponse<EarningsCalendarResponse>>;
933
+ }
934
+
720
935
  declare class Documents {
721
936
  private client;
722
937
  constructor(client: APIClient);
@@ -1159,7 +1374,13 @@ declare class Stocks {
1159
1374
  getAISummary(ticker: string, options?: GetAISummaryOptions): Promise<AISummary>;
1160
1375
  /** Get sentiment/mention metrics breakdown by entity. */
1161
1376
  getMetricsBreakdown(ticker: string, metricType: string, options?: GetMetricsBreakdownOptions): Promise<MetricsBreakdown>;
1162
- /** Get historical OHLCV chart data. */
1377
+ /**
1378
+ * Get historical OHLCV chart data.
1379
+ *
1380
+ * The API returns a bare array of points; this normalizes it to
1381
+ * `{ ticker, timeframe, data }`. `timeframe` echoes the requested value
1382
+ * (defaulting to "1M", matching the server default when omitted).
1383
+ */
1163
1384
  getChart(ticker: string, options?: GetChartOptions): Promise<ChartData>;
1164
1385
  /** Get current market open/closed/pre-market/after-hours status. */
1165
1386
  getMarketStatus(): Promise<MarketStatus>;
@@ -1208,6 +1429,38 @@ declare class Stocks {
1208
1429
  getKpiTypes(ticker: string): Promise<KpiTypeEntry[]>;
1209
1430
  }
1210
1431
 
1432
+ /**
1433
+ * Trackers — observational data products published as a standardized
1434
+ * `TrackerSnapshot` envelope. Every tracker (institution rankings,
1435
+ * hedge-fund reported returns, social trackers, surveillance dashboards)
1436
+ * returns the same shape — consumers write one renderer per `viewType` and
1437
+ * get every current and future SentiSense tracker for free.
1438
+ *
1439
+ * @see TrackerSnapshot
1440
+ */
1441
+ declare class Trackers {
1442
+ private client;
1443
+ constructor(client: APIClient);
1444
+ /**
1445
+ * List every publicly-visible tracker — id, display name, category,
1446
+ * one-line description, and the methodology anchor to link out to.
1447
+ */
1448
+ list(): Promise<TrackerListResponse>;
1449
+ /**
1450
+ * Standardized snapshot envelope for one tracker.
1451
+ *
1452
+ * Returns the envelope as-is: `{ isPreview, previewReason, totalCount?, data }`.
1453
+ * When `data.viewType === "table"` the rows live at `data.rows[]`; when
1454
+ * `"choropleth"` they live at `data.geo[]`; etc. Dispatch on `viewType`
1455
+ * in your renderer.
1456
+ *
1457
+ * @param trackerId — slug from {@link list}, e.g. `"institution-concentration"`.
1458
+ * @param params — provider-specific query params (e.g. `{ scope: "us" }` for
1459
+ * geographically-scoped trackers like hantavirus). Unknown keys are ignored.
1460
+ */
1461
+ get(trackerId: string, params?: Record<string, string | number | boolean>): Promise<TrackerSnapshotResponse>;
1462
+ }
1463
+
1211
1464
  /** @internal HTTP interface exposed to resource classes. */
1212
1465
  interface APIClient {
1213
1466
  get<T = unknown>(path: string, params?: object): Promise<T>;
@@ -1230,6 +1483,8 @@ declare class SentiSense implements APIClient {
1230
1483
  readonly marketMood: MarketMoodResource;
1231
1484
  readonly marketSummary: MarketSummaryResource;
1232
1485
  readonly kb: KB;
1486
+ readonly trackers: Trackers;
1487
+ readonly calendar: Calendar;
1233
1488
  constructor(options?: SentiSenseOptions);
1234
1489
  /** @internal */
1235
1490
  get<T = unknown>(path: string, params?: object): Promise<T>;
@@ -1258,6 +1513,6 @@ declare class APIError extends SentiSenseError {
1258
1513
  constructor(message: string, status: number, code?: string);
1259
1514
  }
1260
1515
 
1261
- declare const VERSION = "0.20.0";
1516
+ declare const VERSION = "0.23.0";
1262
1517
 
1263
- export { type AISummary, APIError, type AnalystAction, type AnalystConsensus, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, AuthenticationError, type ChartData, type ChartDataPoint, type ClusterBuy, type CompanyKpisData, type CongressTrade, type Document, type DocumentSource, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfSentimentAggregate, type EtfSentimentReading, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type GetAnalystActionsOptions, type GetAnalystMarketActivityOptions, type GetEtfInsiderAggregateOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetPoliticiansOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type Holder, type InsiderActivityResponse, type InsiderActivitySummary, type InsiderTrade, type Insight, type InsightPreviewResponse, type InstitutionList, type InstitutionListResponse, type InstitutionSummary, type InstitutionalFlow, type InstitutionalFlowsResponse, type KBEntity, type KpiCoverageEntry, type KpiCoverageResponse, type KpiDataPoint, type KpiSeries, type KpiTypeEntry, type ListInstitutionsOptions, type LockedInsight, type MarketMood, type MarketStatus, type MarketSummary, type MentionCount, type MentionData, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type PoliticianDetail, type PoliticianSummary, type PreviewResponse, type Quarter, RateLimitError, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentData, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockPrice, type StockProfile, type StockQuote, type Story, type StoryCluster, VERSION, type WeightedConsensus, type WeightedNetFlow, SentiSense as default };
1518
+ export { type AISummary, APIError, type AnalystAction, type AnalystConsensus, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, AuthenticationError, type CalendarMeta, type ChartData, type ChartDataPoint, type ClusterBuy, type CompanyKpisData, type CongressTrade, type Document, type DocumentSource, type EarningsCalendarResponse, type EarningsEvent, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfSentimentAggregate, type EtfSentimentReading, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type GetAnalystActionsOptions, type GetAnalystMarketActivityOptions, type GetEarningsCalendarOptions, type GetEtfInsiderAggregateOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetPoliticiansOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type Holder, type InsiderActivityResponse, type InsiderActivitySummary, type InsiderTrade, type Insight, type InsightPreviewResponse, type InstitutionList, type InstitutionListResponse, type InstitutionSummary, type InstitutionalFlow, type InstitutionalFlowsResponse, type KBEntity, type KpiCoverageEntry, type KpiCoverageResponse, type KpiDataPoint, type KpiSeries, type KpiTypeEntry, type ListInstitutionsOptions, type LockedInsight, type MarketMood, type MarketStatus, type MarketSummary, type MentionCount, type MentionData, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type PoliticianDetail, type PoliticianSummary, type PreviewResponse, type Quarter, RateLimitError, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentData, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockPrice, type StockProfile, type StockQuote, type Story, type StoryCluster, type TrackerEvent, type TrackerGeoEntry, type TrackerHeadlineMetric, type TrackerListResponse, type TrackerListing, type TrackerMetricValue, type TrackerSignal, type TrackerSnapshot, type TrackerSnapshotResponse, type TrackerSourceRef, type TrackerTableRow, type TrackerTimeSeriesPoint, VERSION, type WeightedConsensus, type WeightedNetFlow, SentiSense as default };
package/dist/index.d.ts CHANGED
@@ -196,7 +196,9 @@ interface StoryCluster {
196
196
  }
197
197
  interface Story {
198
198
  cluster: StoryCluster;
199
+ /** Human-formatted labels for display, e.g. `"Apple Inc (AAPL)"`. For display only; do not parse symbols out of these. Use `tickers` programmatically. */
199
200
  displayTickers: string[];
201
+ /** Bare ticker symbols for programmatic use, e.g. `"AAPL"`. Use these to filter or look up stocks. */
200
202
  tickers: string[];
201
203
  primaryEntityNames: string[];
202
204
  impactScore: number;
@@ -440,9 +442,53 @@ interface GetPoliticiansOptions {
440
442
  lookbackDays?: number;
441
443
  }
442
444
  /** Generic preview wrapper used by PRO-gated endpoints. */
445
+ interface EarningsEvent {
446
+ ticker: string;
447
+ companyName: string;
448
+ /** Report date, ISO calendar day "YYYY-MM-DD". */
449
+ earningsDate: string;
450
+ /** Session timing. */
451
+ earningsTime: "before_open" | "after_close" | "during_market" | "unknown";
452
+ /** Fiscal period label (e.g. "Q2 2026"), nullable. */
453
+ fiscalQuarter: string | null;
454
+ /** Whether the company has confirmed the date (vs. estimated/projected). */
455
+ confirmed: boolean;
456
+ /** Consensus EPS estimate, nullable. */
457
+ estimatedEps: number | null;
458
+ }
459
+ interface CalendarMeta {
460
+ /** When the snapshot was generated, epoch seconds. */
461
+ generatedAt: number | null;
462
+ /** First day covered, ISO "YYYY-MM-DD". */
463
+ windowStart: string | null;
464
+ /** Last day covered, ISO "YYYY-MM-DD". */
465
+ windowEnd: string | null;
466
+ /** Number of events in this response. */
467
+ count: number;
468
+ /** Always "sentisense". */
469
+ source: string;
470
+ }
471
+ interface EarningsCalendarResponse {
472
+ earnings: EarningsEvent[];
473
+ metadata: CalendarMeta;
474
+ }
475
+ interface GetEarningsCalendarOptions {
476
+ /** Filter to a single ticker. */
477
+ ticker?: string;
478
+ /** Shorthand window: "this" (current Mon-Sun) or "next". */
479
+ week?: "this" | "next";
480
+ /** Inclusive lower date bound, ISO "YYYY-MM-DD". Overrides `week`. */
481
+ from?: string;
482
+ /** Inclusive upper date bound, ISO "YYYY-MM-DD". */
483
+ to?: string;
484
+ /** When true, only company-confirmed dates. */
485
+ confirmed?: boolean;
486
+ /** Session filter. */
487
+ time?: "before_open" | "after_close" | "during_market" | "unknown";
488
+ }
443
489
  interface PreviewResponse<T> {
444
490
  isPreview: boolean;
445
- previewReason: "LOGIN_REQUIRED" | "PRO_REQUIRED" | null;
491
+ previewReason: "PRO_REQUIRED" | null;
446
492
  /**
447
493
  * Number of items in the full PRO dataset, before preview truncation.
448
494
  * Present on preview (free-tier) list responses so callers can show
@@ -553,7 +599,7 @@ interface LockedInsight {
553
599
  /** Preview response returned to free/unauthenticated users on insights endpoints. */
554
600
  interface InsightPreviewResponse {
555
601
  isPreview: true;
556
- previewReason: "LOGIN_REQUIRED" | "PRO_REQUIRED";
602
+ previewReason: "PRO_REQUIRED";
557
603
  /** Full insight objects for the top N results. */
558
604
  insights: Insight[];
559
605
  /** Metadata-only entries for the remaining signals. */
@@ -631,6 +677,161 @@ interface KBEntity {
631
677
  name: string;
632
678
  [key: string]: unknown;
633
679
  }
680
+ /** Per-tracker discovery row returned by `client.trackers.list()`. */
681
+ interface TrackerListing {
682
+ trackerId: string;
683
+ displayName: string;
684
+ /** Coarse grouping for hub filtering: `"institutional"`, `"epidemiology"`, etc. */
685
+ category: string;
686
+ /** Sentence-long subtitle for hub cards + API discovery. */
687
+ description: string;
688
+ /** Renderer hint: `"table"`, `"choropleth"`, `"timeseries"`, `"heatmap"`. */
689
+ viewType: string;
690
+ /** Access tier: `"free"` or `"pro"`. A `pro` tracker truncates to a free preview for FREE callers; a `free` tracker returns the full snapshot to everyone. */
691
+ accessTier?: string;
692
+ /** Fragment on `/methodology` explaining the tracker (e.g. `"#institution-rankings"`). */
693
+ methodologyAnchor: string;
694
+ /** Expected snapshot refresh cadence, in seconds. Informational. */
695
+ refreshIntervalSeconds: number;
696
+ /** Canonical detail URL (e.g. `"/api/v1/trackers/institution-concentration"`). */
697
+ canonicalUrl: string;
698
+ }
699
+ /** Discovery envelope returned by `client.trackers.list()`. */
700
+ interface TrackerListResponse {
701
+ trackers: TrackerListing[];
702
+ }
703
+ /** One row of a `viewType: "table"` tracker — a ranked leaderboard cell. */
704
+ interface TrackerTableRow {
705
+ /** 1-based rank on the sort the tracker is built for; may be null. */
706
+ rank: number | null;
707
+ /** Stable identifier for the entity (CIK, ticker, etc.). */
708
+ rowId: string;
709
+ /** Display name. */
710
+ name: string;
711
+ /** Optional category tag (e.g. `"HEDGE_FUND"`). */
712
+ category: string | null;
713
+ /** Optional canonical link to the entity behind the row (e.g. `"/institutions/Berkshire-Hathaway"`). */
714
+ url: string | null;
715
+ /** Per-cell metric values; each carries its own label and unit. */
716
+ metrics: TrackerMetricValue[];
717
+ }
718
+ /**
719
+ * A labeled quantitative reading attached to a row, geo region, or
720
+ * time-series point. `value` is `unknown` because it can be a number or a
721
+ * status string ("Severe", "Resolved") without forcing a separate type.
722
+ */
723
+ interface TrackerMetricValue {
724
+ label: string;
725
+ value: unknown;
726
+ unit?: string | null;
727
+ trend?: string | null;
728
+ /** Primary-source URL for this cell's value, when the tracker is citation-backed. */
729
+ sourceUrl?: string | null;
730
+ /** Short quote from the primary source supporting this cell's value. */
731
+ sourceQuote?: string | null;
732
+ /** The period this cell refers to (e.g. "2025", "2026-YTD"), when it varies per row. */
733
+ periodLabel?: string | null;
734
+ }
735
+ /** Top-of-page stat tile. A tracker may have 0–N headline metrics. */
736
+ interface TrackerHeadlineMetric {
737
+ label: string;
738
+ value: unknown;
739
+ unit?: string | null;
740
+ asOf?: string | null;
741
+ methodologyNote?: string | null;
742
+ trend?: string | null;
743
+ }
744
+ /** One geographic row for a `viewType: "choropleth"` tracker. */
745
+ interface TrackerGeoEntry {
746
+ geoId?: string | null;
747
+ /** Two-letter ISO country code, when applicable. */
748
+ isoCode?: string | null;
749
+ /** FIPS code with leading zeros preserved (e.g. `"06"`), when applicable. */
750
+ fips?: string | null;
751
+ name: string;
752
+ metrics: TrackerMetricValue[];
753
+ lastEvent?: {
754
+ date?: string;
755
+ url?: string;
756
+ summary?: string;
757
+ } | null;
758
+ }
759
+ /** One point on a time series for a `viewType: "timeseries"` tracker. */
760
+ interface TrackerTimeSeriesPoint {
761
+ /** Free-form date string; trackers pick the granularity. */
762
+ date: string;
763
+ label?: string | null;
764
+ values: TrackerMetricValue[];
765
+ }
766
+ /** A notable event (outbreak, disruption, enforcement action). */
767
+ interface TrackerEvent {
768
+ id: string;
769
+ title: string;
770
+ status: string;
771
+ asOf?: string | null;
772
+ severity?: string | null;
773
+ geoIds?: string[] | null;
774
+ metrics?: TrackerMetricValue[] | null;
775
+ summary?: string | null;
776
+ sources?: TrackerSourceRef[] | null;
777
+ }
778
+ /** Recent news/alert signal. `tier`: 1=authoritative, 2=secondary, 3=mainstream press. */
779
+ interface TrackerSignal {
780
+ tier?: number | null;
781
+ source: string;
782
+ publishedAt: string;
783
+ url: string;
784
+ summary?: string | null;
785
+ }
786
+ /** Citation reference. */
787
+ interface TrackerSourceRef {
788
+ name: string;
789
+ url: string;
790
+ date?: string | null;
791
+ }
792
+ /**
793
+ * Standardized envelope every tracker returns. Exactly one of the payload
794
+ * fields (`rows`, `geo`, `timeSeries`) is populated based on `viewType`;
795
+ * `headline`, `events`, `signals`, `sources`, and `narrative` are
796
+ * companion fields that may appear on any tracker.
797
+ */
798
+ interface TrackerSnapshot {
799
+ trackerId: string;
800
+ /** Optional sub-scope (e.g. `"us"` for hantavirus). Null for unscoped trackers. */
801
+ scope?: string | null;
802
+ schemaVersion: string;
803
+ displayName: string;
804
+ description?: string | null;
805
+ /** Renderer hint: `"table"`, `"choropleth"`, `"timeseries"`, `"heatmap"`. */
806
+ viewType: string;
807
+ /** Free-form "data as of" label (typically a quarter, date, or week). */
808
+ asOf?: string | null;
809
+ generatedAt?: string | null;
810
+ generatedBy?: string | null;
811
+ /** Optional Markdown narrative. */
812
+ narrative?: string | null;
813
+ headline?: TrackerHeadlineMetric[] | null;
814
+ geo?: TrackerGeoEntry[] | null;
815
+ timeSeries?: TrackerTimeSeriesPoint[] | null;
816
+ /** Populated when `viewType === "table"`. */
817
+ rows?: TrackerTableRow[] | null;
818
+ events?: TrackerEvent[] | null;
819
+ signals?: TrackerSignal[] | null;
820
+ sources?: TrackerSourceRef[] | null;
821
+ }
822
+ /**
823
+ * Wire response from `client.trackers.get()`. The snapshot is at `.data`;
824
+ * for FREE callers on a PRO-gated tracker, `isPreview` is `true`, `data`
825
+ * carries a truncated row set, and `totalCount` reports the full set size.
826
+ */
827
+ interface TrackerSnapshotResponse {
828
+ isPreview: boolean;
829
+ /** `"PRO_REQUIRED"` for FREE callers on a gated tracker; otherwise `null`. */
830
+ previewReason: "PRO_REQUIRED" | null;
831
+ /** Full row count before truncation. Only set on preview responses. */
832
+ totalCount?: number;
833
+ data: TrackerSnapshot;
834
+ }
634
835
 
635
836
  interface AnalystConsensus {
636
837
  ticker: string;
@@ -717,6 +918,20 @@ declare class Analyst {
717
918
  marketActivity(options?: GetAnalystMarketActivityOptions): Promise<PreviewResponse<AnalystAction[]>>;
718
919
  }
719
920
 
921
+ declare class Calendar {
922
+ private client;
923
+ constructor(client: APIClient);
924
+ /**
925
+ * Upcoming company earnings, sorted by date.
926
+ *
927
+ * Key-required. A FREE key returns the current week (`isPreview: true`); a PRO
928
+ * key returns the full forward window (about 30 days). Field richness is
929
+ * identical across tiers: the gate is how far ahead you can see, not which
930
+ * columns you get. On a preview, `totalCount` is the full-window event count.
931
+ */
932
+ getEarnings(options?: GetEarningsCalendarOptions): Promise<PreviewResponse<EarningsCalendarResponse>>;
933
+ }
934
+
720
935
  declare class Documents {
721
936
  private client;
722
937
  constructor(client: APIClient);
@@ -1159,7 +1374,13 @@ declare class Stocks {
1159
1374
  getAISummary(ticker: string, options?: GetAISummaryOptions): Promise<AISummary>;
1160
1375
  /** Get sentiment/mention metrics breakdown by entity. */
1161
1376
  getMetricsBreakdown(ticker: string, metricType: string, options?: GetMetricsBreakdownOptions): Promise<MetricsBreakdown>;
1162
- /** Get historical OHLCV chart data. */
1377
+ /**
1378
+ * Get historical OHLCV chart data.
1379
+ *
1380
+ * The API returns a bare array of points; this normalizes it to
1381
+ * `{ ticker, timeframe, data }`. `timeframe` echoes the requested value
1382
+ * (defaulting to "1M", matching the server default when omitted).
1383
+ */
1163
1384
  getChart(ticker: string, options?: GetChartOptions): Promise<ChartData>;
1164
1385
  /** Get current market open/closed/pre-market/after-hours status. */
1165
1386
  getMarketStatus(): Promise<MarketStatus>;
@@ -1208,6 +1429,38 @@ declare class Stocks {
1208
1429
  getKpiTypes(ticker: string): Promise<KpiTypeEntry[]>;
1209
1430
  }
1210
1431
 
1432
+ /**
1433
+ * Trackers — observational data products published as a standardized
1434
+ * `TrackerSnapshot` envelope. Every tracker (institution rankings,
1435
+ * hedge-fund reported returns, social trackers, surveillance dashboards)
1436
+ * returns the same shape — consumers write one renderer per `viewType` and
1437
+ * get every current and future SentiSense tracker for free.
1438
+ *
1439
+ * @see TrackerSnapshot
1440
+ */
1441
+ declare class Trackers {
1442
+ private client;
1443
+ constructor(client: APIClient);
1444
+ /**
1445
+ * List every publicly-visible tracker — id, display name, category,
1446
+ * one-line description, and the methodology anchor to link out to.
1447
+ */
1448
+ list(): Promise<TrackerListResponse>;
1449
+ /**
1450
+ * Standardized snapshot envelope for one tracker.
1451
+ *
1452
+ * Returns the envelope as-is: `{ isPreview, previewReason, totalCount?, data }`.
1453
+ * When `data.viewType === "table"` the rows live at `data.rows[]`; when
1454
+ * `"choropleth"` they live at `data.geo[]`; etc. Dispatch on `viewType`
1455
+ * in your renderer.
1456
+ *
1457
+ * @param trackerId — slug from {@link list}, e.g. `"institution-concentration"`.
1458
+ * @param params — provider-specific query params (e.g. `{ scope: "us" }` for
1459
+ * geographically-scoped trackers like hantavirus). Unknown keys are ignored.
1460
+ */
1461
+ get(trackerId: string, params?: Record<string, string | number | boolean>): Promise<TrackerSnapshotResponse>;
1462
+ }
1463
+
1211
1464
  /** @internal HTTP interface exposed to resource classes. */
1212
1465
  interface APIClient {
1213
1466
  get<T = unknown>(path: string, params?: object): Promise<T>;
@@ -1230,6 +1483,8 @@ declare class SentiSense implements APIClient {
1230
1483
  readonly marketMood: MarketMoodResource;
1231
1484
  readonly marketSummary: MarketSummaryResource;
1232
1485
  readonly kb: KB;
1486
+ readonly trackers: Trackers;
1487
+ readonly calendar: Calendar;
1233
1488
  constructor(options?: SentiSenseOptions);
1234
1489
  /** @internal */
1235
1490
  get<T = unknown>(path: string, params?: object): Promise<T>;
@@ -1258,6 +1513,6 @@ declare class APIError extends SentiSenseError {
1258
1513
  constructor(message: string, status: number, code?: string);
1259
1514
  }
1260
1515
 
1261
- declare const VERSION = "0.20.0";
1516
+ declare const VERSION = "0.23.0";
1262
1517
 
1263
- export { type AISummary, APIError, type AnalystAction, type AnalystConsensus, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, AuthenticationError, type ChartData, type ChartDataPoint, type ClusterBuy, type CompanyKpisData, type CongressTrade, type Document, type DocumentSource, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfSentimentAggregate, type EtfSentimentReading, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type GetAnalystActionsOptions, type GetAnalystMarketActivityOptions, type GetEtfInsiderAggregateOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetPoliticiansOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type Holder, type InsiderActivityResponse, type InsiderActivitySummary, type InsiderTrade, type Insight, type InsightPreviewResponse, type InstitutionList, type InstitutionListResponse, type InstitutionSummary, type InstitutionalFlow, type InstitutionalFlowsResponse, type KBEntity, type KpiCoverageEntry, type KpiCoverageResponse, type KpiDataPoint, type KpiSeries, type KpiTypeEntry, type ListInstitutionsOptions, type LockedInsight, type MarketMood, type MarketStatus, type MarketSummary, type MentionCount, type MentionData, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type PoliticianDetail, type PoliticianSummary, type PreviewResponse, type Quarter, RateLimitError, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentData, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockPrice, type StockProfile, type StockQuote, type Story, type StoryCluster, VERSION, type WeightedConsensus, type WeightedNetFlow, SentiSense as default };
1518
+ export { type AISummary, APIError, type AnalystAction, type AnalystConsensus, type AnalystEarningsSurprise, type AnalystEstimate, type AnalystEstimatesResponse, AuthenticationError, type CalendarMeta, type ChartData, type ChartDataPoint, type ClusterBuy, type CompanyKpisData, type CongressTrade, type Document, type DocumentSource, type EarningsCalendarResponse, type EarningsEvent, type EtfAggregateCoverage, type EtfAnalystAggregate, type EtfAnalystContributor, type EtfHolding, type EtfHoldings, type EtfInfo, type EtfInsiderAggregate, type EtfInsiderContributor, type EtfSentimentAggregate, type EtfSentimentReading, type FloatInfo, type Fundamentals, type FundamentalsPeriod, type GetAnalystActionsOptions, type GetAnalystMarketActivityOptions, type GetEarningsCalendarOptions, type GetEtfInsiderAggregateOptions, type GetInsiderOptions, type GetInsightsOptions, type GetLatestInsightsOptions, type GetPoliticiansOptions, type GetStockInsightsRangeOptions, type GetUserInsightsOptions, type Holder, type InsiderActivityResponse, type InsiderActivitySummary, type InsiderTrade, type Insight, type InsightPreviewResponse, type InstitutionList, type InstitutionListResponse, type InstitutionSummary, type InstitutionalFlow, type InstitutionalFlowsResponse, type KBEntity, type KpiCoverageEntry, type KpiCoverageResponse, type KpiDataPoint, type KpiSeries, type KpiTypeEntry, type ListInstitutionsOptions, type LockedInsight, type MarketMood, type MarketStatus, type MarketSummary, type MentionCount, type MentionData, type MetricDistribution, type MetricDistributionOptions, type MetricType, type MetricsBreakdown, type MetricsOptions, NotFoundError, type PoliticianDetail, type PoliticianSummary, type PreviewResponse, type Quarter, RateLimitError, SentiSense, SentiSenseError, type SentiSenseOptions, type SentimentData, type SentimentEntry, type ServingMetric, type ShortInterest, type ShortVolume, type SimilarStock, type StockDetail, type StockEntity, type StockImage, type StockPrice, type StockProfile, type StockQuote, type Story, type StoryCluster, type TrackerEvent, type TrackerGeoEntry, type TrackerHeadlineMetric, type TrackerListResponse, type TrackerListing, type TrackerMetricValue, type TrackerSignal, type TrackerSnapshot, type TrackerSnapshotResponse, type TrackerSourceRef, type TrackerTableRow, type TrackerTimeSeriesPoint, VERSION, type WeightedConsensus, type WeightedNetFlow, SentiSense as default };