gloomberb 0.17.5 → 0.18.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 +2 -0
- package/README.zh-CN.md +2 -0
- package/package.json +8 -1
- package/patches/electrobun@1.18.1.patch +74 -0
- package/src/account/auth-model.ts +3 -2
- package/src/account/device-signin-dialog.tsx +38 -13
- package/src/account/device-signin.ts +2 -1
- package/src/account/upgrade-dialog.tsx +6 -2
- package/src/api-client/askg.ts +5 -3
- package/src/api-client/bank-figures.ts +73 -0
- package/src/api-client/chat.ts +9 -0
- package/src/api-client/commodity-balances.ts +77 -0
- package/src/api-client/credit-boards.ts +21 -1
- package/src/api-client/crypto-markets.ts +88 -1
- package/src/api-client/data.ts +135 -6
- package/src/api-client/debt-maturities.ts +18 -0
- package/src/api-client/earnings.ts +10 -0
- package/src/api-client/equity-screener.ts +3 -0
- package/src/api-client/errors.ts +13 -0
- package/src/api-client/fund-facts.ts +72 -0
- package/src/api-client/futures-curve.ts +26 -3
- package/src/api-client/geo.ts +11 -1
- package/src/api-client/index.ts +30 -2
- package/src/api-client/insider-signals.ts +159 -0
- package/src/api-client/market-discovery.ts +1 -1
- package/src/api-client/normalizers.ts +2 -0
- package/src/api-client/paths.ts +28 -0
- package/src/api-client/request.ts +11 -3
- package/src/api-client/research-activity.ts +15 -8
- package/src/api-client/socket.ts +16 -3
- package/src/api-client/supply-chain-graph.ts +2 -2
- package/src/api-client/supply-chain.ts +8 -0
- package/src/api-client/tape.ts +12 -0
- package/src/api-client/types.ts +91 -3
- package/src/api-client/upgrade-experiment.ts +4 -3
- package/src/api-client/wall-experiments.ts +5 -3
- package/src/api-client/wall-summary.ts +3 -1
- package/src/api-client/web-experiments.ts +5 -2
- package/src/api-client/yield-curves.ts +17 -0
- package/src/app/command-bar-intro.ts +38 -0
- package/src/app/keybindings/actions.ts +1 -1
- package/src/app/pane-runtime/pane-template-runtime.ts +35 -7
- package/src/app/pane-runtime/plugin-bindings.ts +4 -0
- package/src/app/pane-runtime/ticker-open-runtime.ts +4 -14
- package/src/app/pane-runtime/ticker-open-target.ts +31 -0
- package/src/app/runtime/broker-import.ts +23 -21
- package/src/app/runtime/desktop-deeplink.ts +3 -4
- package/src/app/runtime/plugin-bindings.ts +16 -9
- package/src/app/runtime/startup.ts +3 -4
- package/src/app/runtime/ticker-refresh.ts +13 -12
- package/src/app/runtime/update.ts +17 -3
- package/src/architecture/core-builtin-allowlist.json +2 -13
- package/src/architecture/silent-catch-allowlist.json +3 -0
- package/src/architecture/ui-literals-allowlist.json +186 -0
- package/src/architecture/ui-tokens-allowlist.json +40 -0
- package/src/ask-gloom/pane-context.ts +3 -1
- package/src/brokers/broker-portfolio-sync.ts +66 -0
- package/src/brokers/signed-in/catalog.ts +2 -1
- package/src/brokers/signed-in/client.ts +7 -2
- package/src/brokers/signed-in/sign-in-dialog.tsx +120 -26
- package/src/brokers/signed-in/sign-in.ts +22 -20
- package/src/brokers/sync-broker-instance.ts +77 -42
- package/src/capabilities/chart-series.ts +2 -0
- package/src/capabilities/registry.ts +1 -3
- package/src/cli/bank-section.ts +147 -0
- package/src/cli/base-converter.ts +5 -2
- package/src/cli/board-coins.ts +70 -0
- package/src/cli/commands/fred-series.ts +90 -0
- package/src/cli/commands/market.ts +434 -96
- package/src/cli/commands/news-search.ts +35 -2
- package/src/cli/commands/options-chain.ts +25 -9
- package/src/cli/commands/options-leaps.ts +3 -3
- package/src/cli/commands/overview.ts +130 -40
- package/src/cli/commands/plugins.ts +1 -0
- package/src/cli/commands/search.ts +87 -24
- package/src/cli/commands/system.ts +5 -2
- package/src/cli/commands/ticker.ts +361 -64
- package/src/cli/context.ts +15 -1
- package/src/cli/desktop-pane-shot.ts +11 -3
- package/src/cli/earnings-calendar.ts +2 -1
- package/src/cli/errors.ts +25 -2
- package/src/cli/export-source.ts +18 -3
- package/src/cli/fx-pair.ts +77 -0
- package/src/cli/glossary.ts +196 -14
- package/src/cli/history-rows.ts +84 -19
- package/src/cli/index-roots.ts +26 -0
- package/src/cli/index.ts +57 -20
- package/src/cli/known-gaps.ts +156 -22
- package/src/cli/listing-arg.ts +217 -150
- package/src/cli/listing-suggestion.ts +7 -23
- package/src/cli/name-entries.ts +76 -0
- package/src/cli/not-a-ticker.ts +15 -6
- package/src/cli/pane-functions/access-gate.ts +22 -0
- package/src/cli/pane-functions/capabilities.ts +62 -4
- package/src/cli/pane-functions/catalog.ts +144 -39
- package/src/cli/pane-functions/data.ts +6 -5
- package/src/cli/pane-functions/discovery.ts +1 -1
- package/src/cli/pane-functions/dom.ts +3 -3
- package/src/cli/pane-functions/freshness.ts +93 -17
- package/src/cli/pane-functions/function-help.ts +20 -17
- package/src/cli/pane-functions/headless.ts +187 -40
- package/src/cli/pane-functions/index.ts +126 -12
- package/src/cli/pane-functions/options.ts +17 -3
- package/src/cli/pane-functions/report-notices.ts +17 -3
- package/src/cli/pane-functions/resolver.ts +74 -18
- package/src/cli/pane-functions/screenshot.ts +126 -23
- package/src/cli/pane-functions/shot-options.ts +68 -0
- package/src/cli/perpetual-contract.ts +3 -1
- package/src/cli/report-tables.ts +21 -6
- package/src/cli/result.ts +2 -0
- package/src/cli/series-search.ts +6 -1
- package/src/cli/staged-tickers.ts +5 -0
- package/src/cli/statement-filings.ts +261 -0
- package/src/cli/symbol-args.ts +47 -8
- package/src/cli/symbol-list.ts +9 -2
- package/src/cli/symbol-rows.ts +269 -29
- package/src/cli/ticker-resolution.ts +148 -35
- package/src/cli/treasury-yields.ts +86 -0
- package/src/cli/types.ts +3 -0
- package/src/cli/uncovered-instrument.ts +20 -0
- package/src/cli/unknown-command.ts +18 -0
- package/src/components/chart/composite/axis-overlays.tsx +16 -9
- package/src/components/chart/composite/composite-chart.tsx +163 -23
- package/src/components/chart/composite/downsample.ts +19 -3
- package/src/components/chart/composite/format.ts +13 -0
- package/src/components/chart/composite/legend.tsx +161 -68
- package/src/components/chart/composite/panel-bitmap.ts +8 -2
- package/src/components/chart/composite/panel-labels.ts +38 -0
- package/src/components/chart/composite/panel-series.ts +1 -0
- package/src/components/chart/composite/panel-surface.tsx +28 -10
- package/src/components/chart/composite/price-axis-labels.tsx +16 -3
- package/src/components/chart/composite/scene.ts +60 -2
- package/src/components/chart/composite/series-axis-tags.tsx +67 -0
- package/src/components/chart/composite/toolbar.tsx +12 -7
- package/src/components/chart/composite/tools.ts +2 -2
- package/src/components/chart/composite/types.ts +34 -0
- package/src/components/chart/composite/use-composite-chart-keyboard.ts +28 -1
- package/src/components/chart/core/view-reset.ts +46 -0
- package/src/components/chart/curve/curve-surface.tsx +1 -1
- package/src/components/chart/static/series.ts +39 -0
- package/src/components/chart/static/trail-chart-surface.tsx +2 -1
- package/src/components/command-bar/commands/collection-list.ts +45 -15
- package/src/components/command-bar/commands/collection.ts +11 -4
- package/src/components/command-bar/commands/direct/index.ts +1 -1
- package/src/components/command-bar/commands/registry.ts +2 -2
- package/src/components/command-bar/list/badge.ts +4 -3
- package/src/components/command-bar/list/model.ts +12 -0
- package/src/components/command-bar/list/view.tsx +1 -1
- package/src/components/command-bar/pane-templates/workflow.ts +5 -0
- package/src/components/command-bar/panel/index.tsx +19 -8
- package/src/components/command-bar/panel/native-surface.ts +6 -4
- package/src/components/command-bar/panel/prompt-example.ts +22 -0
- package/src/components/command-bar/routes/root/command-items.ts +1 -1
- package/src/components/command-bar/routes/root/pick-prefetch.ts +38 -0
- package/src/components/command-bar/routes/root/provider-search.ts +9 -9
- package/src/components/command-bar/routes/root/results.ts +13 -0
- package/src/components/command-bar/routes/root/runtime.ts +3 -0
- package/src/components/command-bar/routes/root/shortcut-feedback.ts +3 -1
- package/src/components/command-bar/routes/root/shortcut-items.ts +1 -1
- package/src/components/command-bar/routes/root/start-here.ts +90 -0
- package/src/components/command-bar/routes/ticker-search/actions.ts +34 -0
- package/src/components/command-bar/routes/ticker-search/results.ts +42 -3
- package/src/components/command-bar/routes/ticker-search/route.ts +3 -10
- package/src/components/command-bar/surface/index.tsx +5 -0
- package/src/components/command-bar/theme-picker.tsx +3 -1
- package/src/components/command-bar/workflow/builtin.ts +5 -1
- package/src/components/command-bar/workflow/collection-actions.ts +23 -13
- package/src/components/command-bar/workflow/ops.ts +25 -3
- package/src/components/command-bar/workflow/pane-reuse.ts +3 -2
- package/src/{plugins/builtin/portfolio-list/command-bar.ts → components/command-bar/workflow/portfolio-position.ts} +42 -9
- package/src/components/command-bar/workflow/tickers.ts +7 -5
- package/src/components/feedback-dialog.tsx +1 -1
- package/src/components/form-modal/broker-step.tsx +7 -63
- package/src/components/form-modal/content.tsx +7 -2
- package/src/components/form-modal/field-row.tsx +6 -8
- package/src/components/form-modal/host.tsx +3 -3
- package/src/components/form-modal/model.ts +3 -0
- package/src/components/form-modal/routes.ts +17 -2
- package/src/components/index.ts +6 -6
- package/src/components/input-search-bar.tsx +43 -6
- package/src/components/layout/detached-pane-shell.tsx +0 -1
- package/src/components/layout/floating-pane.tsx +0 -1
- package/src/components/layout/header.tsx +8 -7
- package/src/components/layout/pane/content.tsx +11 -8
- package/src/components/layout/pane/footer/index.tsx +7 -4
- package/src/components/layout/pane/footer/model.ts +28 -2
- package/src/components/layout/pane/header.tsx +9 -19
- package/src/components/layout/pane/index.tsx +0 -1
- package/src/components/layout/pane/instrument-coverage-gate.tsx +57 -0
- package/src/components/layout/pane/pane-tabs.tsx +4 -3
- package/src/components/layout/pane/sizing.ts +9 -0
- package/src/components/layout/pane/ticker-fate-gate.tsx +62 -0
- package/src/components/layout/shell/pane/capture.ts +44 -20
- package/src/components/layout/status-bar.tsx +3 -6
- package/src/components/markdown-text.tsx +17 -2
- package/src/components/market-board/index.tsx +19 -8
- package/src/components/metric-treemap/heat-surface.tsx +2 -7
- package/src/components/onboarding/account-step/qr-panel.tsx +5 -2
- package/src/components/onboarding/onboarding-frame.tsx +24 -21
- package/src/components/onboarding/portfolio-step/positions-panel.tsx +20 -10
- package/src/components/onboarding/wizard-model.ts +1 -1
- package/src/components/onboarding/wizard-positions.ts +56 -19
- package/src/components/pane-settings-dialog/desktop.tsx +12 -50
- package/src/components/pane-settings-dialog/field-dialogs.tsx +1 -1
- package/src/components/price-performance.tsx +18 -2
- package/src/components/reader/article-reader.tsx +11 -10
- package/src/components/reader/detail-reader.tsx +9 -5
- package/src/components/reader/reader-text.tsx +51 -24
- package/src/components/sign-in-code-panel.tsx +129 -75
- package/src/components/ticker/badge/format.ts +64 -15
- package/src/components/ticker/badge/index.tsx +33 -11
- package/src/components/ticker/badge/list.tsx +4 -3
- package/src/components/ticker/badge/text.tsx +2 -2
- package/src/components/ticker/list-table-view.tsx +8 -1
- package/src/components/ui/action-row.tsx +5 -2
- package/src/components/ui/audio-player.tsx +70 -0
- package/src/components/ui/card.tsx +75 -0
- package/src/components/ui/data-table/index.tsx +4 -2
- package/src/components/ui/data-table/opentui/index.tsx +61 -20
- package/src/components/ui/data-table/opentui/model.ts +104 -0
- package/src/components/ui/data-table/types.ts +11 -0
- package/src/components/ui/detail-scroll-body.tsx +1 -1
- package/src/components/ui/dialog-actions.tsx +1 -21
- package/src/components/ui/display.tsx +13 -5
- package/src/components/ui/external-link.tsx +4 -2
- package/src/components/ui/fields.tsx +12 -0
- package/src/components/ui/figure.tsx +5 -3
- package/src/components/ui/frame.tsx +40 -6
- package/src/components/ui/icon.tsx +4 -0
- package/src/components/ui/index.ts +4 -1
- package/src/components/ui/inline-quick-add.tsx +4 -1
- package/src/components/ui/list-view.tsx +8 -0
- package/src/components/ui/prose.tsx +97 -25
- package/src/components/ui/query-bar-keys.tsx +32 -6
- package/src/components/ui/query-bar.tsx +35 -4
- package/src/components/ui/quote.ts +42 -0
- package/src/components/ui/range-track.tsx +15 -2
- package/src/components/ui/reveal-in-scroll-box.ts +21 -3
- package/src/components/ui/select-button.tsx +38 -3
- package/src/components/ui/status.tsx +73 -4
- package/src/components/ui/table-layout.ts +20 -0
- package/src/components/ui/windowed-list.tsx +27 -0
- package/src/components/use-pinned-moment.ts +19 -0
- package/src/core/app-runtime.ts +2 -2
- package/src/core/state/app/instrument.ts +18 -1
- package/src/core/state/app/layout.ts +6 -0
- package/src/core/state/app/state.ts +14 -2
- package/src/data/cached-query.ts +1 -1
- package/src/data/config/chart-settings.ts +3 -1
- package/src/data/config/home.ts +4 -1
- package/src/data/config/store/node.ts +9 -4
- package/src/data/config/store/normalize.ts +9 -0
- package/src/data/json-storage.ts +6 -3
- package/src/data/json-ticker-repository.ts +3 -1
- package/src/data/plugin-cache.ts +5 -1
- package/src/data/sqlite/json.ts +3 -1
- package/src/data/ticker-repository.ts +5 -2
- package/src/docs/snapshot.json +248 -5
- package/src/feedback/diagnostics.ts +2 -6
- package/src/i18n/es.ts +86 -6
- package/src/i18n/index.ts +3 -9
- package/src/i18n/ja.ts +86 -6
- package/src/i18n/ko.ts +86 -6
- package/src/i18n/zh-cn.ts +86 -6
- package/src/i18n/zh-tw.ts +86 -6
- package/src/layout-marketplace/cloud.ts +16 -5
- package/src/layout-marketplace/gallery-desktop.tsx +8 -4
- package/src/layout-marketplace/gallery.tsx +4 -4
- package/src/layout-marketplace/linked-sync.ts +9 -3
- package/src/layout-marketplace/linked.ts +24 -3
- package/src/layout-marketplace/model.ts +39 -4
- package/src/market-data/bars-per-year.ts +43 -0
- package/src/market-data/bond-funds.ts +85 -0
- package/src/market-data/coordinator/auxiliary.ts +5 -2
- package/src/market-data/coordinator/index.ts +39 -5
- package/src/market-data/futures-contract.ts +155 -5
- package/src/market-data/hooks.tsx +77 -12
- package/src/market-data/market/bar-period.ts +107 -0
- package/src/market-data/market/format.ts +18 -14
- package/src/market-data/market/freshness.ts +29 -4
- package/src/market-data/market/index-level.ts +51 -0
- package/src/market-data/market/status.ts +152 -13
- package/src/market-data/model-dividend-yield.ts +117 -0
- package/src/market-data/quotes/freshness.ts +30 -1
- package/src/{plugins/builtin/portfolio-list → market-data/quotes}/live-valuation.ts +52 -6
- package/src/market-data/quotes/regular-session-valuation.ts +32 -1
- package/src/market-data/realized-volatility.ts +16 -7
- package/src/market-data/tax-equivalent.ts +344 -0
- package/src/news/aggregator.ts +4 -2
- package/src/notifications/notification-log.ts +5 -3
- package/src/plugins/auto-update-node.ts +1 -0
- package/src/plugins/builtin/account-management/footer.ts +1 -1
- package/src/plugins/builtin/account-management/keyboard.ts +3 -0
- package/src/plugins/builtin/account-management/model.ts +1 -0
- package/src/plugins/builtin/account-management/pane.tsx +71 -19
- package/src/plugins/builtin/account-management/trial-cancel.ts +40 -0
- package/src/plugins/builtin/alerts/cli.ts +7 -18
- package/src/plugins/builtin/alerts/constants.ts +8 -0
- package/src/plugins/builtin/alerts/event-rows.ts +16 -0
- package/src/plugins/builtin/alerts/events-pane.tsx +2 -14
- package/src/plugins/builtin/alerts/headless.ts +182 -0
- package/src/plugins/builtin/alerts/index.tsx +3 -0
- package/src/plugins/builtin/alerts/pane.tsx +1 -7
- package/src/plugins/builtin/alerts/storage.ts +17 -1
- package/src/plugins/builtin/analytics/index.tsx +6 -1
- package/src/plugins/builtin/analytics/metrics.ts +55 -13
- package/src/plugins/builtin/analytics/risk-headless.ts +26 -7
- package/src/plugins/builtin/analytics/risk-math.ts +83 -0
- package/src/plugins/builtin/analytics/risk-model.ts +171 -19
- package/src/plugins/builtin/analytics/risk-pane.tsx +17 -12
- package/src/plugins/builtin/analytics/sector-model.ts +14 -3
- package/src/plugins/builtin/awards/headless.ts +6 -5
- package/src/plugins/builtin/awards/index.tsx +1 -1
- package/src/plugins/builtin/backtest/client.ts +38 -8
- package/src/plugins/builtin/backtest/engine.ts +25 -13
- package/src/plugins/builtin/backtest/export.ts +27 -0
- package/src/plugins/builtin/backtest/format.ts +19 -3
- package/src/plugins/builtin/backtest/headless.ts +42 -28
- package/src/plugins/builtin/backtest/index.tsx +3 -0
- package/src/plugins/builtin/backtest/pane.tsx +39 -10
- package/src/plugins/builtin/backtest/report.ts +160 -0
- package/src/plugins/builtin/backtest/rules.ts +2 -0
- package/src/plugins/builtin/backtest/window.ts +112 -0
- package/src/plugins/builtin/bond-calculator/headless.ts +3 -2
- package/src/plugins/builtin/broker-manager/add-flow.tsx +4 -4
- package/src/plugins/builtin/builtin-plugin-meta.ts +0 -1
- package/src/plugins/builtin/catalysts/headless.ts +24 -13
- package/src/plugins/builtin/catalysts/index.tsx +4 -2
- package/src/plugins/builtin/catalysts/model.ts +18 -1
- package/src/plugins/builtin/catalysts/pane.tsx +2 -2
- package/src/plugins/builtin/cds/client.ts +28 -5
- package/src/plugins/builtin/cds/headless.ts +183 -31
- package/src/plugins/builtin/cds/index.tsx +1 -1
- package/src/plugins/builtin/cds/model.ts +229 -53
- package/src/plugins/builtin/cds/pane.tsx +82 -26
- package/src/plugins/builtin/central-bank-rates/headless.ts +1 -1
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +39 -1
- package/src/plugins/builtin/chart-composer/chart-spec-edit.ts +77 -0
- package/src/plugins/builtin/chart-composer/chart-spec.ts +15 -0
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +22 -2
- package/src/plugins/builtin/chart-composer/editor/controller.ts +14 -10
- package/src/plugins/builtin/chart-composer/editor/desktop-view.tsx +2 -2
- package/src/plugins/builtin/chart-composer/formula.ts +233 -0
- package/src/plugins/builtin/chart-composer/headless-schema.ts +10 -2
- package/src/plugins/builtin/chart-composer/headless.ts +117 -15
- package/src/plugins/builtin/chart-composer/index.tsx +73 -15
- package/src/plugins/builtin/chart-composer/pane.tsx +86 -23
- package/src/plugins/builtin/chart-composer/presets.ts +165 -8
- package/src/plugins/builtin/chart-composer/quick-add.tsx +9 -2
- package/src/plugins/builtin/chart-composer/series-catalog.ts +85 -16
- package/src/plugins/builtin/chart-composer/series-expression.ts +10 -8
- package/src/plugins/builtin/chart-composer/series-listings.ts +178 -0
- package/src/plugins/builtin/chart-composer/session-range.ts +87 -0
- package/src/plugins/builtin/chart-composer/settings.ts +16 -4
- package/src/plugins/builtin/chart-composer/studies.ts +1 -1
- package/src/plugins/builtin/chat/attachments/desktop.tsx +4 -1
- package/src/plugins/builtin/chat/content/channel-navigation.ts +17 -6
- package/src/plugins/builtin/chat/content/composer-runtime.ts +49 -14
- package/src/plugins/builtin/chat/content/composer.tsx +22 -1
- package/src/plugins/builtin/chat/content/index.tsx +47 -10
- package/src/plugins/builtin/chat/content/layout-metrics.ts +3 -0
- package/src/plugins/builtin/chat/content/mentions.ts +50 -21
- package/src/plugins/builtin/chat/content/scroll.ts +12 -5
- package/src/plugins/builtin/chat/content/shortcuts.ts +32 -13
- package/src/plugins/builtin/chat/content/snapshot.ts +40 -6
- package/src/plugins/builtin/chat/content/transcript.tsx +48 -37
- package/src/plugins/builtin/chat/content/whole-message-copy.ts +44 -2
- package/src/plugins/builtin/chat/controller/index.ts +68 -17
- package/src/plugins/builtin/chat/controller/mention-candidates.ts +104 -0
- package/src/plugins/builtin/chat/controller/realtime.ts +9 -0
- package/src/plugins/builtin/chat/controller/state.ts +10 -0
- package/src/plugins/builtin/chat/controller/view.ts +2 -0
- package/src/plugins/builtin/chat/conversation-recency.ts +73 -0
- package/src/plugins/builtin/chat/conversations.ts +12 -5
- package/src/plugins/builtin/chat/ghost-user.ts +11 -3
- package/src/plugins/builtin/chat/layout.ts +25 -5
- package/src/plugins/builtin/chat/message/desktop.tsx +15 -5
- package/src/plugins/builtin/chat/message/header.tsx +26 -4
- package/src/plugins/builtin/chat/message/pane-chip.tsx +131 -35
- package/src/plugins/builtin/chat/message/render-state.ts +28 -1
- package/src/plugins/builtin/chat/message/terminal.tsx +9 -3
- package/src/plugins/builtin/chat/pane-links/composer.ts +87 -0
- package/src/plugins/builtin/chat/pane-links/model.ts +1 -1
- package/src/plugins/builtin/chat/share/flow.tsx +9 -73
- package/src/plugins/builtin/chat/sidebar-rows.ts +18 -5
- package/src/plugins/builtin/chat/sidebar.tsx +6 -1
- package/src/plugins/builtin/cloud/askg/controller.ts +5 -3
- package/src/plugins/builtin/cloud/askg/executor.ts +3 -1
- package/src/plugins/builtin/cloud/askg/lock-note.ts +16 -0
- package/src/plugins/builtin/cloud/askg/manifest.ts +4 -3
- package/src/plugins/builtin/cloud/askg/pane.tsx +6 -2
- package/src/plugins/builtin/cloud/auth-actions.tsx +4 -2
- package/src/plugins/builtin/cloud/company-picker.tsx +21 -26
- package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +5 -3
- package/src/plugins/builtin/cloud/plugin.tsx +2 -0
- package/src/plugins/builtin/cloud/team/module.tsx +5 -1
- package/src/plugins/builtin/cloud/team/pane.tsx +11 -4
- package/src/plugins/builtin/cloud/team/views.ts +11 -4
- package/src/plugins/builtin/cloud/terminal-relay/engine.ts +9 -4
- package/src/plugins/builtin/cloud/terminal-relay/manifest.ts +16 -5
- package/src/plugins/builtin/cloud/terminal-relay/prompts.tsx +3 -2
- package/src/plugins/builtin/cloud/thesis/detail.tsx +2 -1
- package/src/plugins/builtin/cloud/thesis/exposure.ts +3 -0
- package/src/plugins/builtin/cloud/thesis/prompts.tsx +3 -2
- package/src/plugins/builtin/cloud/thesis/ticker-tab.tsx +2 -1
- package/src/plugins/builtin/cloud/trial-offer-status-widget.tsx +2 -1
- package/src/plugins/builtin/cloud/verification-status-widget.tsx +2 -1
- package/src/plugins/builtin/commodities-energy/index.tsx +31 -9
- package/src/plugins/builtin/commodities-energy/view-state.ts +11 -0
- package/src/plugins/builtin/commodity-balances/client.ts +51 -193
- package/src/plugins/builtin/commodity-balances/headless.ts +10 -3
- package/src/plugins/builtin/commodity-balances/model.ts +5 -180
- package/src/plugins/builtin/commodity-balances/pane.tsx +3 -0
- package/src/plugins/builtin/company-attention/headless.ts +15 -7
- package/src/plugins/builtin/company-attention/index.tsx +1 -1
- package/src/plugins/builtin/company-attention/model.ts +49 -4
- package/src/plugins/builtin/company-attention/pane.tsx +11 -9
- package/src/plugins/builtin/company-kpis/headless.ts +4 -3
- package/src/plugins/builtin/company-kpis/index.tsx +2 -2
- package/src/plugins/builtin/company-kpis/pane.tsx +9 -3
- package/src/plugins/builtin/congress-trades/headless.ts +23 -2
- package/src/plugins/builtin/correlation/relationship/pane.tsx +18 -46
- package/src/plugins/builtin/cot/headless.ts +5 -2
- package/src/plugins/builtin/credit-boards/cdx-pane.tsx +41 -13
- package/src/plugins/builtin/credit-boards/client.ts +9 -2
- package/src/plugins/builtin/credit-boards/headless.ts +93 -27
- package/src/plugins/builtin/credit-boards/index.tsx +15 -4
- package/src/plugins/builtin/credit-boards/model.ts +105 -6
- package/src/plugins/builtin/credit-boards/sovr-pane.tsx +14 -3
- package/src/plugins/builtin/credit-documents/detail.tsx +2 -1
- package/src/plugins/builtin/credit-documents/index.tsx +3 -0
- package/src/plugins/builtin/credit-documents/model.ts +3 -10
- package/src/plugins/builtin/crypto-board/client.ts +152 -2
- package/src/plugins/builtin/crypto-board/headless.ts +138 -19
- package/src/plugins/builtin/crypto-board/index.tsx +5 -3
- package/src/plugins/builtin/crypto-board/model.ts +210 -12
- package/src/plugins/builtin/crypto-board/pane.tsx +148 -9
- package/src/plugins/builtin/crypto-board/series.ts +52 -1
- package/src/plugins/builtin/crypto-board/supply.ts +123 -0
- package/src/plugins/builtin/custom-view/index.tsx +1 -1
- package/src/plugins/builtin/custom-view/loader.ts +57 -7
- package/src/plugins/builtin/custom-view/sources.ts +146 -0
- package/src/plugins/builtin/custom-view/view-spec.ts +37 -1
- package/src/plugins/builtin/debt-maturities/client.ts +54 -1
- package/src/plugins/builtin/debt-maturities/headless.ts +27 -3
- package/src/plugins/builtin/debt-maturities/index.tsx +2 -0
- package/src/plugins/builtin/debt-maturities/model.ts +58 -13
- package/src/plugins/builtin/debt-maturities/pane.tsx +47 -7
- package/src/plugins/builtin/dividend-yield/client.ts +42 -36
- package/src/plugins/builtin/dividend-yield/headless.ts +113 -18
- package/src/plugins/builtin/dividend-yield/index.tsx +5 -2
- package/src/plugins/builtin/dividend-yield/pane.tsx +37 -13
- package/src/plugins/builtin/dividend-yield/provider-client.ts +7 -3
- package/src/plugins/builtin/dividend-yield/ranking.ts +187 -0
- package/src/plugins/builtin/dividend-yield/reference-price.ts +28 -5
- package/src/plugins/builtin/dividend-yield/types.ts +6 -1
- package/src/plugins/builtin/dividend-yield/view.ts +1 -1
- package/src/plugins/builtin/docs/blocks.tsx +54 -8
- package/src/plugins/builtin/docs/pane.tsx +8 -13
- package/src/plugins/builtin/earnings/board-model.ts +33 -3
- package/src/plugins/builtin/earnings/board-table.ts +59 -14
- package/src/plugins/builtin/earnings/board.tsx +36 -3
- package/src/plugins/builtin/earnings/headless.ts +27 -7
- package/src/plugins/builtin/earnings/history-model.ts +9 -1
- package/src/plugins/builtin/earnings/history-table.ts +16 -5
- package/src/plugins/builtin/earnings/history.tsx +40 -10
- package/src/plugins/builtin/earnings/index.tsx +3 -1
- package/src/plugins/builtin/earnings/no-earnings.ts +52 -0
- package/src/plugins/builtin/earnings-calls/data.ts +51 -0
- package/src/plugins/builtin/earnings-calls/headless.ts +7 -0
- package/src/plugins/builtin/earnings-calls/index.tsx +1 -0
- package/src/plugins/builtin/earnings-calls/model.ts +97 -0
- package/src/plugins/builtin/earnings-calls/pane.tsx +107 -7
- package/src/plugins/builtin/earnings-calls/transcript-view.tsx +140 -22
- package/src/plugins/builtin/earnings-calls/use-call-playback.ts +194 -0
- package/src/plugins/builtin/econ/calendar-model.ts +22 -0
- package/src/plugins/builtin/econ/calendar-source.ts +35 -0
- package/src/plugins/builtin/econ/index.tsx +40 -8
- package/src/plugins/builtin/econ-statistics/defs.ts +7 -0
- package/src/plugins/builtin/econ-statistics/detail.tsx +11 -1
- package/src/plugins/builtin/econ-statistics/headless.ts +31 -5
- package/src/plugins/builtin/econ-statistics/pane.tsx +5 -3
- package/src/plugins/builtin/econ-statistics/stats.ts +10 -0
- package/src/plugins/builtin/econ-statistics/view.ts +23 -0
- package/src/plugins/builtin/equity-screener/client.ts +1 -1
- package/src/plugins/builtin/equity-screener/model.ts +46 -4
- package/src/plugins/builtin/equity-screener/pane.tsx +3 -0
- package/src/plugins/builtin/estimate-revisions/client.ts +32 -22
- package/src/plugins/builtin/estimate-revisions/headless.ts +1 -0
- package/src/plugins/builtin/estimate-revisions/index.tsx +1 -0
- package/src/plugins/builtin/estimate-revisions/pane.tsx +5 -3
- package/src/plugins/builtin/executives/index.tsx +1 -0
- package/src/plugins/builtin/exposure/editor.tsx +3 -3
- package/src/plugins/builtin/fear-greed/index.tsx +9 -0
- package/src/plugins/builtin/filing-events/index.tsx +1 -0
- package/src/plugins/builtin/futures/index.tsx +2 -2
- package/src/plugins/builtin/futures/model.ts +39 -25
- package/src/plugins/builtin/futures/series.ts +38 -1
- package/src/plugins/builtin/futures/table.tsx +1 -1
- package/src/plugins/builtin/futures/use-board-terms.ts +2 -2
- package/src/plugins/builtin/futures-curve/client.ts +4 -4
- package/src/plugins/builtin/futures-curve/headless.ts +24 -4
- package/src/plugins/builtin/futures-curve/index.tsx +2 -2
- package/src/plugins/builtin/futures-curve/model.ts +50 -9
- package/src/plugins/builtin/futures-curve/pane.tsx +14 -10
- package/src/plugins/builtin/help/index.tsx +55 -8
- package/src/plugins/builtin/help/shortcut-table.tsx +15 -2
- package/src/plugins/builtin/holders/headless.ts +12 -0
- package/src/plugins/builtin/insider/headless.ts +345 -5
- package/src/plugins/builtin/insider/index.tsx +304 -36
- package/src/plugins/builtin/insider/insiders.tsx +224 -0
- package/src/plugins/builtin/insider/signals-cells.tsx +52 -0
- package/src/plugins/builtin/insider/signals-client.ts +193 -0
- package/src/plugins/builtin/insider/signals-model.ts +718 -0
- package/src/plugins/builtin/insider/signals.tsx +376 -0
- package/src/plugins/builtin/ipo-calendar/headless.ts +17 -7
- package/src/plugins/builtin/ipo-calendar/index.tsx +23 -3
- package/src/plugins/builtin/ipo-calendar/model.ts +84 -36
- package/src/plugins/builtin/ipo-calendar/pane.tsx +20 -8
- package/src/plugins/builtin/iv-history/client.ts +41 -2
- package/src/plugins/builtin/iv-history/headless.ts +26 -16
- package/src/plugins/builtin/iv-history/screen-pane.tsx +25 -7
- package/src/plugins/builtin/jobs/headless.ts +1 -0
- package/src/plugins/builtin/jobs/index.tsx +1 -0
- package/src/plugins/builtin/jodi/client.ts +42 -205
- package/src/plugins/builtin/jodi/headless.ts +15 -4
- package/src/plugins/builtin/jodi/model.ts +18 -43
- package/src/plugins/builtin/jodi/pane.tsx +5 -0
- package/src/plugins/builtin/kelly-sizer/pane.tsx +1 -1
- package/src/plugins/builtin/kelly-sizer/portfolio.ts +1 -1
- package/src/plugins/builtin/market-heatmap/headless.ts +1 -0
- package/src/plugins/builtin/market-heatmap/portfolio.ts +3 -1
- package/src/plugins/builtin/market-movers/client.ts +32 -6
- package/src/plugins/builtin/market-movers/headless.ts +7 -2
- package/src/plugins/builtin/market-movers/model.ts +64 -3
- package/src/plugins/builtin/market-movers/screener.ts +20 -9
- package/src/plugins/builtin/market-valuation/detail.tsx +7 -2
- package/src/plugins/builtin/market-valuation/headless.ts +17 -4
- package/src/plugins/builtin/market-valuation/pane.tsx +8 -4
- package/src/plugins/builtin/market-valuation/view.ts +10 -0
- package/src/plugins/builtin/market-valuation/zone-scale/desktop.tsx +31 -57
- package/src/plugins/builtin/mna/distress/headless.ts +2 -1
- package/src/plugins/builtin/mna/headless.ts +14 -2
- package/src/plugins/builtin/mna/index.tsx +1 -0
- package/src/plugins/builtin/news/headless.ts +4 -0
- package/src/plugins/builtin/news/wire/news/footer.ts +5 -3
- package/src/plugins/builtin/news/wire/news/table.tsx +57 -11
- package/src/plugins/builtin/notes/cli.ts +8 -4
- package/src/plugins/builtin/notes/files.ts +66 -20
- package/src/plugins/builtin/notes/migration.ts +18 -6
- package/src/plugins/builtin/notes/owner.tsx +3 -2
- package/src/plugins/builtin/notes/quick-notes-pane.tsx +3 -2
- package/src/plugins/builtin/options-positioning/client.ts +10 -0
- package/src/plugins/builtin/options-positioning/headless.ts +88 -13
- package/src/plugins/builtin/options-positioning/index.tsx +2 -2
- package/src/plugins/builtin/options-positioning/model.ts +33 -0
- package/src/plugins/builtin/options-positioning/pane.tsx +38 -16
- package/src/plugins/builtin/options-scenario/charts.tsx +13 -4
- package/src/plugins/builtin/options-scenario/client.ts +114 -17
- package/src/plugins/builtin/options-scenario/collar.ts +141 -0
- package/src/plugins/builtin/options-scenario/csp.ts +1 -1
- package/src/plugins/builtin/options-scenario/freshness.ts +27 -0
- package/src/plugins/builtin/options-scenario/headless.ts +30 -12
- package/src/plugins/builtin/options-scenario/index.tsx +1 -1
- package/src/plugins/builtin/options-scenario/model.ts +55 -5
- package/src/plugins/builtin/options-scenario/pane.tsx +24 -5
- package/src/plugins/builtin/pe-band/index.tsx +1 -1
- package/src/plugins/builtin/pe-band/model.ts +1 -15
- package/src/plugins/builtin/perps/headless.ts +30 -13
- package/src/plugins/builtin/perps/model.ts +45 -3
- package/src/plugins/builtin/perps/pane.tsx +7 -7
- package/src/plugins/builtin/portfolio-list/cell-version.ts +10 -4
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +128 -14
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +144 -63
- package/src/plugins/builtin/portfolio-list/cli/render.ts +373 -48
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +23 -9
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +25 -35
- package/src/plugins/builtin/portfolio-list/grid.tsx +3 -1
- package/src/plugins/builtin/portfolio-list/headless.ts +161 -32
- package/src/plugins/builtin/portfolio-list/income.ts +296 -0
- package/src/plugins/builtin/portfolio-list/metrics.ts +2 -2
- package/src/plugins/builtin/portfolio-list/pane/futures-terms.ts +58 -0
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +63 -14
- package/src/plugins/builtin/portfolio-list/pane/remove-ticker.ts +1 -1
- package/src/plugins/builtin/portfolio-list/pane/supplemental.ts +47 -28
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +38 -8
- package/src/plugins/builtin/portfolio-list/quick-add/resolution.ts +12 -4
- package/src/plugins/builtin/portfolio-list/settings.ts +22 -0
- package/src/plugins/builtin/portfolio-list/since-last-seen.ts +197 -0
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +26 -4
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +32 -4
- package/src/plugins/builtin/portfolio-list/table.tsx +39 -7
- package/src/plugins/builtin/power/prices-headless.ts +2 -1
- package/src/plugins/builtin/realized-vol/chart-model.ts +29 -5
- package/src/plugins/builtin/realized-vol/charts.tsx +14 -8
- package/src/plugins/builtin/realized-vol/evidence.ts +2 -0
- package/src/plugins/builtin/realized-vol/headless.ts +6 -4
- package/src/plugins/builtin/realized-vol/model.ts +5 -1
- package/src/plugins/builtin/realized-vol/pane.tsx +31 -11
- package/src/plugins/builtin/realized-vol/settings.ts +1 -1
- package/src/plugins/builtin/research/analyst-headless.ts +4 -0
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +16 -5
- package/src/plugins/builtin/research/event-model.ts +63 -51
- package/src/plugins/builtin/research/headless-schema.ts +1 -0
- package/src/plugins/builtin/research/headless.ts +4 -1
- package/src/plugins/builtin/research/index.tsx +3 -0
- package/src/plugins/builtin/research/relative-valuation-columns.ts +27 -5
- package/src/plugins/builtin/research/relative-valuation-headless.ts +2 -0
- package/src/plugins/builtin/revenue-breakdown/index.tsx +1 -0
- package/src/plugins/builtin/reverse-dcf/headless.ts +28 -9
- package/src/plugins/builtin/reverse-dcf/index.tsx +5 -2
- package/src/plugins/builtin/reverse-dcf/model.ts +87 -6
- package/src/plugins/builtin/reverse-dcf/pane.tsx +30 -7
- package/src/plugins/builtin/risk-factors/headless.ts +7 -0
- package/src/plugins/builtin/risk-factors/index.tsx +1 -0
- package/src/plugins/builtin/scanner/feed.ts +5 -3
- package/src/plugins/builtin/scanner/headless.ts +9 -57
- package/src/plugins/builtin/scanner/index.ts +1 -2
- package/src/plugins/builtin/sec/forms.ts +2 -6
- package/src/plugins/builtin/sec/fund-facts-view.tsx +53 -0
- package/src/plugins/builtin/sec/fund-facts.ts +328 -0
- package/src/plugins/builtin/sec/headless.ts +140 -44
- package/src/plugins/builtin/sec/index.tsx +95 -30
- package/src/plugins/builtin/sec/model.ts +2 -44
- package/src/plugins/builtin/shared/earnings-report.ts +48 -1
- package/src/plugins/builtin/shared/headless-options.ts +10 -0
- package/src/plugins/builtin/shared/history-span.ts +55 -0
- package/src/plugins/builtin/shared/locked-rows.tsx +3 -1
- package/src/plugins/builtin/shared/move-rank.ts +108 -0
- package/src/plugins/builtin/shared/report-freshness.ts +45 -20
- package/src/plugins/builtin/shared/scanner-capture.ts +95 -0
- package/src/plugins/builtin/shared/series-detail-chart.tsx +5 -2
- package/src/plugins/builtin/shared/series-list-detail.tsx +7 -3
- package/src/plugins/builtin/shared/ticker-surface.ts +16 -2
- package/src/plugins/builtin/shared/treasury-cutoffs.ts +15 -0
- package/src/plugins/builtin/shared/use-quote-board.ts +13 -5
- package/src/plugins/builtin/shared/volatility/live-session.ts +34 -0
- package/src/plugins/builtin/shared/volatility-indices.ts +32 -0
- package/src/plugins/builtin/short-interest/headless.ts +3 -0
- package/src/plugins/builtin/short-interest/watch-model.ts +2 -2
- package/src/plugins/builtin/social-mentions/client.ts +8 -1
- package/src/plugins/builtin/social-mentions/pane.tsx +8 -6
- package/src/plugins/builtin/supply-chain/client.ts +12 -3
- package/src/plugins/builtin/supply-chain/disclosure-quote.tsx +9 -5
- package/src/plugins/builtin/supply-chain/evidence.ts +3 -1
- package/src/plugins/builtin/supply-chain/flow-layout.ts +2 -1
- package/src/plugins/builtin/supply-chain/flow.tsx +23 -16
- package/src/plugins/builtin/supply-chain/graph-client.ts +8 -5
- package/src/plugins/builtin/supply-chain/graph-evidence.ts +1 -1
- package/src/plugins/builtin/supply-chain/graph-model.ts +10 -2
- package/src/plugins/builtin/supply-chain/graph-pane.tsx +9 -7
- package/src/plugins/builtin/supply-chain/graph.tsx +8 -6
- package/src/plugins/builtin/supply-chain/headless.ts +69 -27
- package/src/plugins/builtin/supply-chain/index.tsx +1 -1
- package/src/plugins/builtin/supply-chain/model.ts +76 -15
- package/src/plugins/builtin/supply-chain/pane.tsx +29 -15
- package/src/plugins/builtin/supply-chain/row-evidence.tsx +5 -4
- package/src/plugins/builtin/themes/headless.ts +15 -2
- package/src/plugins/builtin/themes/model.ts +2 -5
- package/src/plugins/builtin/thirteenf/api.ts +50 -2
- package/src/plugins/builtin/thirteenf/data.ts +250 -11
- package/src/plugins/builtin/thirteenf/headless.ts +311 -28
- package/src/plugins/builtin/thirteenf/index.tsx +4 -1
- package/src/plugins/builtin/thirteenf/model.ts +244 -19
- package/src/plugins/builtin/thirteenf/overlap-pane.tsx +133 -33
- package/src/plugins/builtin/thirteenf/overlap.ts +1 -1
- package/src/plugins/builtin/thirteenf/pane.tsx +24 -5
- package/src/plugins/builtin/thirteenf/report-notes.ts +78 -0
- package/src/plugins/builtin/thirteenf/types.ts +49 -0
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +106 -24
- package/src/plugins/builtin/ticker-detail/data-panes/history-bars.ts +108 -0
- package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +26 -8
- package/src/plugins/builtin/ticker-detail/financials/model.ts +2 -42
- package/src/plugins/builtin/ticker-detail/financials/tab.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/headless-schema.ts +4 -2
- package/src/plugins/builtin/ticker-detail/headless.ts +109 -23
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +27 -3
- package/src/plugins/builtin/ticker-detail/overview/dividend.ts +60 -0
- package/src/plugins/builtin/ticker-detail/overview/model.ts +46 -9
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +3 -0
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +37 -4
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +18 -19
- package/src/plugins/builtin/time-sales/client.ts +7 -4
- package/src/plugins/builtin/time-sales/headless.ts +71 -22
- package/src/plugins/builtin/time-sales/model.ts +12 -0
- package/src/plugins/builtin/time-sales/pane.tsx +31 -7
- package/src/plugins/builtin/time-sales/window.ts +128 -0
- package/src/plugins/builtin/trace-bonds/client.ts +351 -33
- package/src/plugins/builtin/trace-bonds/headless.ts +60 -22
- package/src/plugins/builtin/trace-bonds/index.tsx +4 -2
- package/src/plugins/builtin/trace-bonds/model.ts +27 -25
- package/src/plugins/builtin/trace-bonds/pane.tsx +63 -45
- package/src/plugins/builtin/treasury-auctions/cache.ts +61 -15
- package/src/plugins/builtin/treasury-auctions/client.ts +45 -10
- package/src/plugins/builtin/treasury-auctions/headless.ts +35 -13
- package/src/plugins/builtin/treasury-auctions/index.tsx +5 -2
- package/src/plugins/builtin/treasury-auctions/model.ts +20 -16
- package/src/plugins/builtin/treasury-auctions/pane.tsx +29 -12
- package/src/plugins/builtin/vol-surface/charts.tsx +2 -1
- package/src/plugins/builtin/vol-surface/headless.ts +3 -2
- package/src/plugins/builtin/vol-surface/pane.tsx +2 -1
- package/src/plugins/builtin/vol-surface/stored.ts +4 -7
- package/src/plugins/builtin/volatility/chart-model.ts +16 -15
- package/src/plugins/builtin/volatility/charts.tsx +5 -5
- package/src/plugins/builtin/volatility/client.ts +73 -2
- package/src/plugins/builtin/volatility/evidence.ts +13 -14
- package/src/plugins/builtin/volatility/headless.ts +13 -7
- package/src/plugins/builtin/volatility/index.tsx +1 -1
- package/src/plugins/builtin/volatility/model.ts +104 -38
- package/src/plugins/builtin/volatility/pane.tsx +42 -24
- package/src/plugins/builtin/volatility/series.ts +22 -13
- package/src/plugins/builtin/world-venue-map/geo-series.ts +9 -0
- package/src/plugins/builtin/world-venue-map/headless.ts +25 -8
- package/src/plugins/builtin/world-venue-map/index.ts +16 -2
- package/src/plugins/builtin/world-venue-map/map.tsx +13 -17
- package/src/plugins/builtin/yield-curve/curves.ts +29 -5
- package/src/plugins/builtin/yield-curve/headless.ts +41 -8
- package/src/plugins/builtin/yield-curve/history.ts +5 -5
- package/src/plugins/builtin/yield-curve/index.tsx +30 -13
- package/src/plugins/compat.ts +3 -1
- package/src/plugins/dependencies.ts +8 -2
- package/src/plugins/host-link.ts +12 -5
- package/src/plugins/installer.ts +16 -7
- package/src/plugins/loader.ts +9 -2
- package/src/plugins/marketplace/activation.ts +10 -4
- package/src/plugins/registry/host-actions.ts +3 -0
- package/src/plugins/registry/index.ts +3 -1
- package/src/{plugins/builtin/portfolio-list → portfolio}/allocation.ts +82 -15
- package/src/{plugins/builtin/portfolio-list → portfolio}/column-values.ts +143 -55
- package/src/portfolio/futures-positions.ts +213 -0
- package/src/portfolio/futures-terms.ts +75 -0
- package/src/portfolio/manual-lots.ts +78 -0
- package/src/{plugins/builtin/portfolio-list → portfolio}/mutations.ts +59 -15
- package/src/portfolio/position-metrics.ts +44 -10
- package/src/portfolio/valuation-basis.ts +34 -24
- package/src/public/__snapshots__/public-api.test.ts.snap +6 -0
- package/src/public/time-series.ts +2 -1
- package/src/remote/confirm-change.tsx +2 -1
- package/src/remote/controller.ts +27 -7
- package/src/remote/schema.ts +25 -9
- package/src/remote/server.ts +1 -1
- package/src/remote/watchlist.ts +9 -1
- package/src/renderers/cloudflare/http-proxy.ts +21 -13
- package/src/renderers/dom/data-table/row.tsx +1 -1
- package/src/renderers/dom/desktop/audio-player.tsx +312 -0
- package/src/renderers/dom/desktop/control-styles.ts +17 -82
- package/src/renderers/dom/desktop/controls.tsx +39 -63
- package/src/renderers/dom/desktop/dialog-actions.tsx +13 -53
- package/src/renderers/dom/desktop/icons.tsx +8 -0
- package/src/renderers/dom/desktop/list-view.tsx +6 -6
- package/src/renderers/dom/desktop/popover.tsx +0 -3
- package/src/renderers/dom/desktop/query-bar.tsx +7 -5
- package/src/renderers/dom/desktop/select-field.tsx +9 -8
- package/src/renderers/dom/desktop/stack-header.ts +3 -0
- package/src/renderers/dom/dom-ui-host.tsx +5 -2
- package/src/renderers/dom/host/chart-surface.tsx +3 -3
- package/src/renderers/dom/host/size-observer.ts +33 -4
- package/src/renderers/dom/host/surface-3d.tsx +3 -2
- package/src/renderers/dom/host/surface-fit.ts +4 -1
- package/src/renderers/dom/host/tabs.tsx +22 -132
- package/src/renderers/dom/styles.css +358 -160
- package/src/renderers/dom/windowed-list.tsx +201 -0
- package/src/renderers/dom/windowed-rows.ts +65 -0
- package/src/renderers/electrobun/bun/core-capabilities.ts +1 -1
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +2 -9
- package/src/renderers/electrobun/bun/desktop/backend.ts +1 -1
- package/src/renderers/electrobun/bun/desktop/http-stream.ts +21 -6
- package/src/renderers/electrobun/bun/desktop/initialization.ts +1 -0
- package/src/renderers/electrobun/bun/desktop/state-broadcaster.ts +43 -1
- package/src/renderers/electrobun/bun/desktop/update.ts +21 -6
- package/src/renderers/electrobun/bun/desktop/workspace/requests.ts +5 -1
- package/src/renderers/electrobun/shared/protocol.ts +4 -2
- package/src/renderers/electrobun/shared/rpc-codec.ts +7 -0
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +21 -17
- package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +3 -3
- package/src/renderers/electrobun/view/desktop/window/bridge.ts +6 -8
- package/src/renderers/electrobun/view/desktop/window/snapshot.ts +18 -0
- package/src/renderers/electrobun/view/http-fetch.ts +12 -1
- package/src/series/capability.ts +1 -0
- package/src/series/files.ts +9 -3
- package/src/series/registry.ts +40 -14
- package/src/series/resolve.ts +121 -18
- package/src/series/standalone.ts +3 -2
- package/src/series/types.ts +55 -1
- package/src/series/validate.ts +39 -0
- package/src/shares/api.ts +26 -7
- package/src/shares/bug-report-dialog.tsx +2 -2
- package/src/shares/bug-report-flow.tsx +4 -7
- package/src/shares/capture-flow.ts +5 -4
- package/src/shares/capture-preview.tsx +2 -2
- package/src/shares/chat.ts +7 -27
- package/src/shares/flow.tsx +86 -40
- package/src/shares/location.ts +1 -3
- package/src/shares/pane-image.ts +11 -9
- package/src/shares/pane.ts +5 -2
- package/src/shares/payload.ts +1 -1
- package/src/shares/personal-pane.ts +3 -3
- package/src/shares/portable-layout.ts +9 -2
- package/src/shares/ready.ts +42 -0
- package/src/shares/test-harness.ts +62 -0
- package/src/sources/gloomberb-cloud/batched-lookups.ts +73 -0
- package/src/sources/gloomberb-cloud/index.ts +64 -12
- package/src/sources/gloomberb-cloud/normalizers.ts +31 -2
- package/src/sources/gloomberb-cloud/perpetuals.ts +20 -1
- package/src/sources/history-omitted.ts +34 -0
- package/src/sources/history-result.ts +3 -0
- package/src/sources/history-retention.ts +1 -1
- package/src/sources/listing-symbols.ts +8 -4
- package/src/sources/provider-errors.ts +43 -1
- package/src/sources/provider-router/batches.ts +3 -2
- package/src/sources/provider-router/cache.ts +2 -1
- package/src/sources/provider-router/cached-routes.ts +9 -3
- package/src/sources/provider-router/history.ts +9 -8
- package/src/sources/provider-router/index.ts +18 -3
- package/src/sources/provider-router/primary.ts +5 -4
- package/src/sources/provider-router/quote-route.ts +3 -1
- package/src/sources/provider-router/routing.ts +2 -1
- package/src/sources/provider-router/search.ts +47 -13
- package/src/sources/provider-router/streaming.ts +7 -4
- package/src/sources/sec-edgar.ts +1 -3
- package/src/state/app/context/index.tsx +9 -0
- package/src/state/app/tab-cursor.ts +222 -0
- package/src/state/hooks/quote-streaming.ts +3 -2
- package/src/state/hooks/session-snapshot.ts +3 -2
- package/src/state/persist-scheduler.ts +12 -4
- package/src/sync/controller.ts +22 -1
- package/src/sync/core-contributors.ts +264 -74
- package/src/team/collections-sync.ts +14 -4
- package/src/team/collections.ts +40 -11
- package/src/team/store.ts +5 -4
- package/src/telemetry/attention-counts.ts +8 -2
- package/src/telemetry/crash-reports-dom.ts +3 -0
- package/src/telemetry/crash-reports-node.ts +7 -4
- package/src/telemetry/crash-reports.ts +11 -11
- package/src/telemetry/usage-counts.ts +16 -12
- package/src/test-support/config-store.ts +31 -0
- package/src/test-support/moved-symbols.ts +64 -0
- package/src/theme/colors.ts +32 -0
- package/src/theme/font-scale.ts +2 -0
- package/src/theme/ui-tokens.ts +71 -0
- package/src/tickers/batched-lookups.ts +186 -0
- package/src/tickers/company-name-listing.ts +97 -0
- package/src/tickers/company-name.ts +13 -0
- package/src/tickers/instrument-coverage.ts +112 -0
- package/src/tickers/listing-fate.ts +282 -0
- package/src/tickers/listing-venues.ts +24 -5
- package/src/tickers/open-target.ts +13 -5
- package/src/tickers/search/index.ts +156 -37
- package/src/tickers/search/ranking.ts +68 -3
- package/src/tickers/search/types.ts +3 -0
- package/src/tickers/search/upsert.ts +22 -7
- package/src/tickers/terminal-codes.ts +79 -0
- package/src/tickers/ticker-changes.ts +100 -12
- package/src/tickers/us-listing.ts +2 -1
- package/src/time-series/bar-spacing.ts +19 -0
- package/src/time-series/chart-data.ts +116 -21
- package/src/time-series/field-catalog.ts +5 -2
- package/src/time-series/forward-valuation.ts +10 -7
- package/src/time-series/fundamentals.ts +103 -17
- package/src/time-series/hooks.ts +2 -0
- package/src/time-series/ice-credit.ts +17 -2
- package/src/time-series/live-bars.ts +24 -9
- package/src/time-series/live-quotes.ts +2 -3
- package/src/time-series/parsed-history-cache.ts +2 -0
- package/src/time-series/price-comparison.ts +6 -1
- package/src/time-series/price-units.ts +69 -0
- package/src/time-series/resolve.ts +114 -14
- package/src/time-series/session-bar.ts +138 -0
- package/src/time-series/spec.ts +14 -4
- package/src/time-series/studies.ts +214 -15
- package/src/time-series/transforms.ts +2 -0
- package/src/time-series/types.ts +33 -1
- package/src/time-series/use-chart-resolution.ts +2 -1
- package/src/time-series/valuation-price.ts +13 -0
- package/src/types/config.ts +17 -1
- package/src/types/data-provider.ts +20 -0
- package/src/types/financials.ts +2 -0
- package/src/types/headless.ts +169 -1
- package/src/types/instrument.ts +6 -0
- package/src/types/plugin.ts +39 -9
- package/src/types/price-history.ts +5 -0
- package/src/types/ticker-changes.ts +19 -0
- package/src/types/ticker.ts +10 -2
- package/src/ui/context-menu.tsx +2 -0
- package/src/ui/host.tsx +45 -4
- package/src/ui/measured-cells.ts +13 -7
- package/src/ui/qr.ts +7 -5
- package/src/updater/index.ts +8 -6
- package/src/utils/asset-category.ts +20 -0
- package/src/utils/calendar-date.ts +86 -27
- package/src/utils/currency-units.ts +17 -0
- package/src/utils/debug-log.ts +1 -1
- package/src/utils/decimal-comma.ts +83 -3
- package/src/utils/dividend-cash.ts +48 -0
- package/src/utils/dom-screenshot-rasters.ts +3 -1
- package/src/utils/dom-screenshot.ts +14 -10
- package/src/utils/exchange-rate-snapshot.ts +9 -4
- package/src/utils/external-url.ts +1 -0
- package/src/utils/fiscal-period.ts +47 -0
- package/src/utils/format.ts +5 -2
- package/src/utils/forward-dividend.ts +160 -11
- package/src/utils/fundamentals.ts +7 -2
- package/src/utils/futures-generic.ts +34 -8
- package/src/utils/http-proxy-response.ts +67 -9
- package/src/utils/local-utc-offset.ts +2 -0
- package/src/utils/log-failure.ts +31 -0
- package/src/utils/option-expiry.ts +12 -12
- package/src/utils/plugin-proxy-hosts.json +1 -5
- package/src/utils/price-history-integrity.ts +56 -0
- package/src/utils/price-history.ts +13 -1
- package/src/utils/sec-filings.ts +245 -0
- package/src/utils/selection-clipboard.ts +5 -2
- package/src/utils/throttled-fetch.ts +1 -0
- package/src/{plugins/builtin/dividend-yield/trailing-cash.ts → utils/trailing-dividend.ts} +55 -8
- package/src/utils/typo-distance.ts +22 -0
- package/src/utils/url.ts +1 -0
- package/src/utils/utc-time.ts +11 -0
- package/src/plugins/builtin/chat/share/targets.ts +0 -27
- package/src/plugins/builtin/shared/zip-text.ts +0 -46
- package/src/renderers/dom/host/top-surface.ts +0 -119
- package/src/shares/dialog.tsx +0 -221
- package/src/shares/live.ts +0 -19
|
@@ -9,6 +9,12 @@ export interface CreditBoardPoint {
|
|
|
9
9
|
prints: number;
|
|
10
10
|
/** The contract that was on the run that day, e.g. "2031-12-20". */
|
|
11
11
|
maturity: string;
|
|
12
|
+
/**
|
|
13
|
+
* HY and EM: the day's price as a conventional spread in bp (ISDA standard
|
|
14
|
+
* model at the index's coupon and standard recovery). Absent from a server
|
|
15
|
+
* that predates it and on spread-quoted indexes; null where no spread fits.
|
|
16
|
+
*/
|
|
17
|
+
spreadBp?: number | null;
|
|
12
18
|
}
|
|
13
19
|
|
|
14
20
|
/** IG and iTraxx trade on spread (bp); HY and EM on price. */
|
|
@@ -20,11 +26,25 @@ export interface CdxBoardIndex {
|
|
|
20
26
|
quote: CreditIndexQuote;
|
|
21
27
|
currency: string;
|
|
22
28
|
couponBp: number;
|
|
29
|
+
/** The recovery the spread equivalent assumes (HY 30%, EM 25%). Absent from a server that predates it. */
|
|
30
|
+
recovery?: number;
|
|
23
31
|
date: string | null;
|
|
24
32
|
maturity: string | null;
|
|
25
33
|
level: number | null;
|
|
26
34
|
prints: number | null;
|
|
27
|
-
/**
|
|
35
|
+
/** HY and EM: the latest level as a conventional spread in bp, as on each point. */
|
|
36
|
+
spreadBp?: number | null;
|
|
37
|
+
/**
|
|
38
|
+
* The latest day is today's New York trade date, still trading: its level
|
|
39
|
+
* and prints are so far and the moves run to `changeDate`. Absent from a
|
|
40
|
+
* server that predates it, which the board then works out from the date.
|
|
41
|
+
*/
|
|
42
|
+
partial?: boolean;
|
|
43
|
+
/** When the latest day's last print on its contract was executed, ISO UTC. */
|
|
44
|
+
lastPrintAt?: string | null;
|
|
45
|
+
/** The last complete day, which the moves run to. */
|
|
46
|
+
changeDate?: string | null;
|
|
47
|
+
/** In the quote's unit, on one contract across a roll, between complete days. */
|
|
28
48
|
change1D: number | null;
|
|
29
49
|
change1W: number | null;
|
|
30
50
|
/** Absent from a server that predates it. */
|
|
@@ -6,8 +6,30 @@ interface CryptoDailyCloses {
|
|
|
6
6
|
|
|
7
7
|
export type CryptoAssetKind = "coin" | "stablecoin";
|
|
8
8
|
|
|
9
|
+
/** What a stablecoin holds to: a currency, or a dollar value that accrues yield. */
|
|
10
|
+
export interface CryptoPeg {
|
|
11
|
+
/** The currency it is pegged to: USD, EUR. */
|
|
12
|
+
currency: string;
|
|
13
|
+
/** Yield accrues into the price (USDY): it has no par to be off. */
|
|
14
|
+
accrues: boolean;
|
|
15
|
+
/** The target in dollars: 1 for USD, the EUR/USD rate for EUR; null when it accrues or the rate is unavailable. */
|
|
16
|
+
price: number | null;
|
|
17
|
+
/** When a target that moves (an exchange rate) was quoted; null for USD. */
|
|
18
|
+
asOf: string | null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** The lowest and highest trade in the 24 hours to `end`, and when each was. */
|
|
22
|
+
interface CryptoDayRange {
|
|
23
|
+
low: number;
|
|
24
|
+
lowAt: string;
|
|
25
|
+
high: number;
|
|
26
|
+
highAt: string;
|
|
27
|
+
start: string;
|
|
28
|
+
end: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
9
31
|
export interface CryptoMarketAsset {
|
|
10
|
-
/**
|
|
32
|
+
/** The coin's one symbol for quotes, history, streaming and the ticker pane, for example BTC-USD or USDE-USD. */
|
|
11
33
|
symbol: string;
|
|
12
34
|
/** Display code, for example BTC. */
|
|
13
35
|
code: string;
|
|
@@ -31,6 +53,10 @@ export interface CryptoMarketAsset {
|
|
|
31
53
|
yearAgoPrice: number | null;
|
|
32
54
|
quoteTime: string | null;
|
|
33
55
|
history: CryptoDailyCloses | null;
|
|
56
|
+
/** A stablecoin's peg; absent from servers before it was served. */
|
|
57
|
+
peg?: CryptoPeg | null;
|
|
58
|
+
/** A stablecoin's 24-hour low and high; absent from servers before it was served. */
|
|
59
|
+
range24h?: CryptoDayRange | null;
|
|
34
60
|
}
|
|
35
61
|
|
|
36
62
|
export interface CryptoMarketsPayload {
|
|
@@ -47,3 +73,64 @@ export interface CryptoMarketsPayload {
|
|
|
47
73
|
assets: CryptoMarketAsset[];
|
|
48
74
|
warnings: string[];
|
|
49
75
|
}
|
|
76
|
+
|
|
77
|
+
/** One stablecoin's supply across chains in USD, on the board's as-of day. */
|
|
78
|
+
export interface StablecoinSupplyCoin {
|
|
79
|
+
symbol: string;
|
|
80
|
+
name: string;
|
|
81
|
+
/** The currency the coin is pegged to, as the source names it: peggedUSD, peggedEUR, peggedVAR (a floating target). */
|
|
82
|
+
pegType: string;
|
|
83
|
+
pegMechanism: string | null;
|
|
84
|
+
/** USD per unit the day's supply is valued at; null when the source states no units that day. */
|
|
85
|
+
price: number | null;
|
|
86
|
+
/** USD on the as-of day: the same figure the coin's daily supply ends on. */
|
|
87
|
+
supply: number;
|
|
88
|
+
/** Change in USD over 7 and 30 days on the coin's daily supply, and in percent of the value then. */
|
|
89
|
+
change7d: number | null;
|
|
90
|
+
change7dPercent: number | null;
|
|
91
|
+
change30d: number | null;
|
|
92
|
+
change30dPercent: number | null;
|
|
93
|
+
/** Percent of the total stablecoin supply. */
|
|
94
|
+
share: number | null;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface StablecoinSupplyPayload {
|
|
98
|
+
version: 1;
|
|
99
|
+
generatedAt: string;
|
|
100
|
+
fetchedAt: string | null;
|
|
101
|
+
/** UTC date of the newest daily total. */
|
|
102
|
+
asOf: string | null;
|
|
103
|
+
status: "available" | "stale" | "unavailable";
|
|
104
|
+
source: { name: string; url: string };
|
|
105
|
+
total: {
|
|
106
|
+
supply: number;
|
|
107
|
+
change7d: number | null;
|
|
108
|
+
change7dPercent: number | null;
|
|
109
|
+
change30d: number | null;
|
|
110
|
+
change30dPercent: number | null;
|
|
111
|
+
} | null;
|
|
112
|
+
/** The largest stablecoins by supply, largest first. */
|
|
113
|
+
coins: StablecoinSupplyCoin[];
|
|
114
|
+
/** Daily supply in USD since `start`: the total and the largest coins, on the same days. */
|
|
115
|
+
history: {
|
|
116
|
+
start: string;
|
|
117
|
+
total: Array<number | null>;
|
|
118
|
+
coins: Array<{ symbol: string; name: string; values: Array<number | null> }>;
|
|
119
|
+
} | null;
|
|
120
|
+
warnings: string[];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** One stablecoin's daily supply in USD. */
|
|
124
|
+
export interface StablecoinSupplyHistoryPayload {
|
|
125
|
+
version: 1;
|
|
126
|
+
generatedAt: string;
|
|
127
|
+
fetchedAt: string | null;
|
|
128
|
+
asOf: string | null;
|
|
129
|
+
status: "available" | "stale" | "unavailable";
|
|
130
|
+
source: { name: string; url: string };
|
|
131
|
+
symbol: string;
|
|
132
|
+
name: string;
|
|
133
|
+
pegType: string;
|
|
134
|
+
history: { start: string; values: Array<number | null> } | null;
|
|
135
|
+
warnings: string[];
|
|
136
|
+
}
|
package/src/api-client/data.ts
CHANGED
|
@@ -13,6 +13,7 @@ import { supplyGraphQuery, type GraphOptions, type GraphPayload } from "./supply
|
|
|
13
13
|
import type { AwardDetailPayload, AwardFilter, AwardsPayload } from "./awards";
|
|
14
14
|
import type { EarningsEvent } from "../types/data-provider";
|
|
15
15
|
import type { MarketDividendsPayload, MarketHeatmapResult, MarketHeatmapUniverseId, MarketMoversPayload } from "./market-discovery";
|
|
16
|
+
import type { BankFiguresPayload } from "./bank-figures";
|
|
16
17
|
import type { DebtMaturitiesPayload } from "./debt-maturities";
|
|
17
18
|
import type { RevenueBreakdownPayload, RevenueBreakdownView } from "./revenue-breakdown";
|
|
18
19
|
import type { MnaDealPayload, MnaDealsParams, MnaDealsPayload } from "./mna";
|
|
@@ -27,7 +28,7 @@ import type { LettersParams } from "./letters";
|
|
|
27
28
|
import type { IpoCalendarParams, IpoCalendarPayload } from "./ipo";
|
|
28
29
|
import type { TickerChanges } from "../types/ticker-changes";
|
|
29
30
|
import type { OrganizationTickersResponse } from "./organization-tickers";
|
|
30
|
-
import type { CryptoMarketsPayload } from "./crypto-markets";
|
|
31
|
+
import type { CryptoMarketsPayload, StablecoinSupplyHistoryPayload, StablecoinSupplyPayload } from "./crypto-markets";
|
|
31
32
|
import type { CentralBankRatesPayload } from "./central-bank-rates";
|
|
32
33
|
import type { EstimateRevisionsPayload } from "./estimate-revisions";
|
|
33
34
|
import type { MoneyMarketsPayload } from "./money-markets";
|
|
@@ -35,15 +36,18 @@ import type { CloudCurveHistory, CloudCurveId, CloudCurveView, CloudWorldCurves
|
|
|
35
36
|
import type { CdxBoardPayload, CloudCreditBoardParams, SovrBoardPayload } from "./credit-boards";
|
|
36
37
|
import type { ShortVolumePayload, ShortVolumeScope } from "./short-volume";
|
|
37
38
|
import type { BeneficialOwnersPayload, CloudBeneficialOwnersParams } from "./beneficial-owners";
|
|
39
|
+
import type { CloudInsiderSignalsParams, InsiderSignalsPayload } from "./insider-signals";
|
|
38
40
|
import type { SocialMentionDayPosts, SocialMentionsPayload, SocialMentionsRange } from "./social-mentions";
|
|
39
41
|
import type { FuturesContractTermsPayload, FuturesCurveAsOfPayload, FuturesCurvePayload } from "./futures-curve";
|
|
40
42
|
import type { CotBoardPayload, CotContractPayload, CotFamily, CotClass } from "./cot";
|
|
41
43
|
import type { DoeBoardPayload, DoePricesPayload } from "./doe";
|
|
44
|
+
import type { JodiBoardPayload, PsdBoardPayload } from "./commodity-balances";
|
|
42
45
|
import type { CarbonBoard, CarbonHistory, EuropePowerBoard, EuropePowerHistory, GasStorageBoard, GasStorageHistory, GasStorageSeasonal } from "./europe-energy";
|
|
43
46
|
import type { GpuBoardPayload, GpuEventsPayload, GpuHistoryPayload, GpuHistoryQuery } from "./gpu";
|
|
44
47
|
import type { CpiBoardPayload } from "./cpi";
|
|
45
|
-
import type { TapeSnapshot } from "./tape";
|
|
48
|
+
import type { TapeRange, TapeSnapshot } from "./tape";
|
|
46
49
|
import { signalWithTimeout } from "../utils/async-deadline";
|
|
50
|
+
import { ApiRequestError } from "./errors";
|
|
47
51
|
import type { ExchangeRateSnapshot } from "../types/exchange-rate";
|
|
48
52
|
import type { RatePathPayload } from "./rates";
|
|
49
53
|
import type { EarningsCalendarPayload, EarningsCalendarQuery, EarningsHistoryPayload } from "./earnings";
|
|
@@ -65,6 +69,7 @@ import {
|
|
|
65
69
|
cloudCdsPath,
|
|
66
70
|
cloudCongressHousePath,
|
|
67
71
|
cloudEarningsCallsPath,
|
|
72
|
+
cloudEarningsCallAudioPath,
|
|
68
73
|
cloudEarningsTranscriptPath,
|
|
69
74
|
cloudJobsMoversPath,
|
|
70
75
|
cloudJobsPath,
|
|
@@ -72,6 +77,7 @@ import {
|
|
|
72
77
|
type CloudJobsPostingsParams,
|
|
73
78
|
type IssuerListingParams,
|
|
74
79
|
cloudProxyStatementPath,
|
|
80
|
+
cloudBankFiguresPath,
|
|
75
81
|
cloudDebtMaturitiesPath,
|
|
76
82
|
cloudFilingEventsPath,
|
|
77
83
|
cloudRiskReportPath,
|
|
@@ -81,6 +87,7 @@ import {
|
|
|
81
87
|
cloudExchangeRatePath,
|
|
82
88
|
cloudSec13FPath,
|
|
83
89
|
cloudSecBeneficialOwnersPath,
|
|
90
|
+
cloudSecInsiderSignalsPath,
|
|
84
91
|
cloudSecFilingContentPath,
|
|
85
92
|
cloudSecFilingDocumentsPath,
|
|
86
93
|
cloudSecFilingsPath,
|
|
@@ -119,6 +126,7 @@ import type {
|
|
|
119
126
|
CloudCdsResponse,
|
|
120
127
|
CloudCongressHousePayload,
|
|
121
128
|
CloudEarningsCallListPayload,
|
|
129
|
+
CloudEarningsCallAudioPayload,
|
|
122
130
|
CloudEarningsTranscriptPayload,
|
|
123
131
|
CloudJobsMoversPayload,
|
|
124
132
|
CloudJobsPostingsPayload,
|
|
@@ -143,6 +151,7 @@ import type {
|
|
|
143
151
|
CloudMarketResponse,
|
|
144
152
|
CloudMarketScreenerCategory,
|
|
145
153
|
CloudMarketScreenerPayload,
|
|
154
|
+
CloudMoverSession,
|
|
146
155
|
CloudNewsListResponse,
|
|
147
156
|
CloudNewsPayload,
|
|
148
157
|
CloudSavedSearch,
|
|
@@ -165,6 +174,26 @@ import type {
|
|
|
165
174
|
} from "./types";
|
|
166
175
|
import type { CloudApiRequest } from "./request";
|
|
167
176
|
|
|
177
|
+
/** A batched lookup's answer: one item per key asked, with that key's own status. */
|
|
178
|
+
type CloudBatchAnswer<K extends string, T> = {
|
|
179
|
+
items?: Array<{ status?: string; data?: T | null } & Record<K, string>>;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* A batched lookup's items by the key each was asked as: the data of an item
|
|
184
|
+
* that has some, null for one with nothing on record, and none for one the
|
|
185
|
+
* service could not answer (rate limited, an upstream failure).
|
|
186
|
+
*/
|
|
187
|
+
function batchAnswers<K extends string, T>(response: CloudMarketResponse<CloudBatchAnswer<K, T>>, key: K): Map<string, T | null> {
|
|
188
|
+
const answers = new Map<string, T | null>();
|
|
189
|
+
for (const item of response.data?.items ?? []) {
|
|
190
|
+
if (typeof item?.[key] !== "string") continue;
|
|
191
|
+
if (item.status === "success" || item.status === "partial") answers.set(item[key], item.data ?? null);
|
|
192
|
+
else if (item.status === "empty") answers.set(item[key], null);
|
|
193
|
+
}
|
|
194
|
+
return answers;
|
|
195
|
+
}
|
|
196
|
+
|
|
168
197
|
export class CloudDataApi {
|
|
169
198
|
constructor(private readonly request: CloudApiRequest) {}
|
|
170
199
|
|
|
@@ -204,6 +233,11 @@ export class CloudDataApi {
|
|
|
204
233
|
return this.request<import("./members").FundMembersPayload>(`/cloud/members/${encodeURIComponent(fund)}`);
|
|
205
234
|
}
|
|
206
235
|
|
|
236
|
+
/** A US-listed fund's fee, NAV, premium and net assets as its sponsor publishes them. */
|
|
237
|
+
getFundFacts(ticker: string) {
|
|
238
|
+
return this.request<import("./fund-facts").FundFactsPayload>(`/cloud/fund-facts/${encodeURIComponent(ticker)}`);
|
|
239
|
+
}
|
|
240
|
+
|
|
207
241
|
getFundChanges(fund: string) {
|
|
208
242
|
return this.request<import("./members").FundChangesPayload>(`/cloud/members/${encodeURIComponent(fund)}/changes`);
|
|
209
243
|
}
|
|
@@ -233,6 +267,10 @@ export class CloudDataApi {
|
|
|
233
267
|
const response = await this.request<
|
|
234
268
|
CloudMarketResponse<InstrumentSearchResult[]>
|
|
235
269
|
>(cloudMarketSearchPath(query, limit));
|
|
270
|
+
// A search the service could not run (its catalogue rate limited, say) is no answer, not an empty one.
|
|
271
|
+
if (response.status === "retryable_error" || response.status === "fatal_error") {
|
|
272
|
+
throw new ApiRequestError(response.reasonCode ?? "Cloud search failed", undefined, undefined, response.status);
|
|
273
|
+
}
|
|
236
274
|
return response.data ?? [];
|
|
237
275
|
}
|
|
238
276
|
|
|
@@ -283,8 +321,10 @@ export class CloudDataApi {
|
|
|
283
321
|
return this.request(`/news/article-summary?${new URLSearchParams({ url })}`);
|
|
284
322
|
}
|
|
285
323
|
|
|
286
|
-
|
|
324
|
+
/** `session` is what Gainers and Losers are ranked by (see CloudMoverSession). */
|
|
325
|
+
getMarketMovers(category: "day_gainers" | "day_losers" | "most_actives", count = 25, refresh = false, session?: CloudMoverSession): Promise<CloudMarketResponse<MarketMoversPayload>> {
|
|
287
326
|
const params = new URLSearchParams({ category, count: String(count), mode: refresh ? "refresh" : "cache-first" });
|
|
327
|
+
if (session && category !== "most_actives") params.set("session", session);
|
|
288
328
|
return this.request(`/market/movers?${params}`);
|
|
289
329
|
}
|
|
290
330
|
|
|
@@ -300,12 +340,17 @@ export class CloudDataApi {
|
|
|
300
340
|
return this.requestMarketSymbol("/market/dividends", symbol, exchange);
|
|
301
341
|
}
|
|
302
342
|
|
|
303
|
-
/**
|
|
343
|
+
/**
|
|
344
|
+
* Gainers, losers and most active, or the pre-market, after-hours and gap
|
|
345
|
+
* lists with a `side`. `session` is what Gainers and Losers are ranked by
|
|
346
|
+
* (see CloudMoverSession).
|
|
347
|
+
*/
|
|
304
348
|
async getCloudMarketScreener<Category extends CloudMarketScreenerCategory | CloudSessionMoversCategory>(
|
|
305
349
|
category: Category,
|
|
306
350
|
count = 25,
|
|
307
351
|
mode: "cache-first" | "refresh" = "cache-first",
|
|
308
352
|
side?: CloudSessionMoversSide,
|
|
353
|
+
session?: CloudMoverSession,
|
|
309
354
|
): Promise<CloudMarketResponse<Category extends CloudSessionMoversCategory ? CloudSessionMoversPayload : CloudMarketScreenerPayload>> {
|
|
310
355
|
const requestedCount = Number.isFinite(count) ? Math.round(count) : 25;
|
|
311
356
|
const params = new URLSearchParams({
|
|
@@ -314,6 +359,7 @@ export class CloudDataApi {
|
|
|
314
359
|
mode,
|
|
315
360
|
});
|
|
316
361
|
if (side && isSessionMoversCategory(category)) params.set("side", side);
|
|
362
|
+
if (session && (category === "gainers" || category === "losers")) params.set("session", session);
|
|
317
363
|
return this.request(`/market/screener?${params.toString()}`);
|
|
318
364
|
}
|
|
319
365
|
|
|
@@ -390,6 +436,40 @@ export class CloudDataApi {
|
|
|
390
436
|
);
|
|
391
437
|
}
|
|
392
438
|
|
|
439
|
+
/**
|
|
440
|
+
* `getCloudTickerChanges` for several symbols in one request: by symbol as
|
|
441
|
+
* asked, null for one with no change on record. A symbol the service could
|
|
442
|
+
* not answer for is left out.
|
|
443
|
+
*/
|
|
444
|
+
async getCloudTickerChangesBatch(
|
|
445
|
+
symbols: readonly string[],
|
|
446
|
+
options: { signal?: AbortSignal } = {},
|
|
447
|
+
): Promise<Map<string, TickerChanges | null>> {
|
|
448
|
+
const response = await this.request<CloudMarketResponse<CloudBatchAnswer<"symbol", TickerChanges>>>(
|
|
449
|
+
"/market/ticker-changes/batch",
|
|
450
|
+
{ method: "POST", body: JSON.stringify({ symbols }), ...options.signal ? { signal: options.signal } : {} },
|
|
451
|
+
);
|
|
452
|
+
return batchAnswers(response, "symbol");
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Several searches in one request, each answered as `searchInstruments`
|
|
457
|
+
* answers it: by query as asked, a query the service could not search left out.
|
|
458
|
+
*/
|
|
459
|
+
async searchInstrumentsBatch(
|
|
460
|
+
queries: readonly string[],
|
|
461
|
+
limit = 10,
|
|
462
|
+
options: { signal?: AbortSignal } = {},
|
|
463
|
+
): Promise<Map<string, InstrumentSearchResult[]>> {
|
|
464
|
+
const response = await this.request<CloudMarketResponse<CloudBatchAnswer<"query", InstrumentSearchResult[]>>>(
|
|
465
|
+
"/market/search/batch",
|
|
466
|
+
{ method: "POST", body: JSON.stringify({ queries, limit }), ...options.signal ? { signal: options.signal } : {} },
|
|
467
|
+
);
|
|
468
|
+
const answers = new Map<string, InstrumentSearchResult[]>();
|
|
469
|
+
for (const [query, rows] of batchAnswers(response, "query")) answers.set(query, rows ?? []);
|
|
470
|
+
return answers;
|
|
471
|
+
}
|
|
472
|
+
|
|
393
473
|
/** The listed company each organization name resolves to, if any: a trial's lead sponsors, a page at a time. */
|
|
394
474
|
async getCloudOrganizationTickers(names: readonly string[], signal?: AbortSignal): Promise<OrganizationTickersResponse> {
|
|
395
475
|
return this.request<OrganizationTickersResponse>("/market/organization-tickers", {
|
|
@@ -446,6 +526,11 @@ export class CloudDataApi {
|
|
|
446
526
|
return this.request<CloudEconEventPayload[]>("/cloud/econ/calendar");
|
|
447
527
|
}
|
|
448
528
|
|
|
529
|
+
/** The calendar from a UTC day, past events included, and the first day the stored calendar holds. */
|
|
530
|
+
async getCloudEconomicCalendarFrom(from: string): Promise<{ events: CloudEconEventPayload[]; storedFrom: string | null }> {
|
|
531
|
+
return this.request<{ events: CloudEconEventPayload[]; storedFrom: string | null }>(`/cloud/econ/calendar/history?from=${encodeURIComponent(from)}`);
|
|
532
|
+
}
|
|
533
|
+
|
|
449
534
|
async getCloudMacroReleaseDays(): Promise<CloudMacroReleaseDaysPayload> {
|
|
450
535
|
return this.request<CloudMacroReleaseDaysPayload>("/cloud/econ/release-days");
|
|
451
536
|
}
|
|
@@ -590,6 +675,14 @@ export class CloudDataApi {
|
|
|
590
675
|
return this.request<DoePricesPayload>("/cloud/doe/prices");
|
|
591
676
|
}
|
|
592
677
|
|
|
678
|
+
getCloudJodiBoard(signal?: AbortSignal): Promise<JodiBoardPayload> {
|
|
679
|
+
return this.request<JodiBoardPayload>("/cloud/jodi/board", { signal });
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
getCloudPsdBoard(signal?: AbortSignal): Promise<PsdBoardPayload> {
|
|
683
|
+
return this.request<PsdBoardPayload>("/cloud/psd/board", { signal });
|
|
684
|
+
}
|
|
685
|
+
|
|
593
686
|
async getCloudAttention(window: AttentionWindow = "now", symbol?: string): Promise<AttentionPayload> {
|
|
594
687
|
const path = symbol ? `/cloud/attention/${encodeURIComponent(symbol)}` : "/cloud/attention";
|
|
595
688
|
return this.request<AttentionPayload>(`${path}?window=${window}`);
|
|
@@ -672,8 +765,10 @@ export class CloudDataApi {
|
|
|
672
765
|
return this.request<CpiBoardPayload>("/cloud/cpi/board");
|
|
673
766
|
}
|
|
674
767
|
|
|
675
|
-
|
|
676
|
-
|
|
768
|
+
/** The latest tape, or with a `range` that window of the session, read forward from its start. */
|
|
769
|
+
async getCloudTape(symbol: string, exchange: string, signal?: AbortSignal, range?: TapeRange): Promise<TapeSnapshot> {
|
|
770
|
+
const window = range ? `&from=${encodeURIComponent(range.from)}&to=${encodeURIComponent(range.to)}` : "";
|
|
771
|
+
return this.request<TapeSnapshot>(`/cloud/tape/${encodeURIComponent(symbol)}?exchange=${encodeURIComponent(exchange)}${window}`, { signal: signalWithTimeout(signal, 30_000) });
|
|
677
772
|
}
|
|
678
773
|
|
|
679
774
|
async getCloudYieldCurve(): Promise<CloudYieldPointPayload[]> {
|
|
@@ -704,6 +799,19 @@ export class CloudDataApi {
|
|
|
704
799
|
return this.request<CryptoMarketsPayload>("/cloud/crypto/markets", { signal: AbortSignal.timeout(45_000) });
|
|
705
800
|
}
|
|
706
801
|
|
|
802
|
+
/** Total stablecoin supply and the largest coins', daily, with 7D and 30D changes and shares. */
|
|
803
|
+
async getCloudStablecoinSupply(): Promise<StablecoinSupplyPayload> {
|
|
804
|
+
return this.request<StablecoinSupplyPayload>("/cloud/crypto/stablecoins/supply", { signal: AbortSignal.timeout(30_000) });
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
/** One listed stablecoin's daily supply, by symbol. */
|
|
808
|
+
async getCloudStablecoinSupplyHistory(symbol: string): Promise<StablecoinSupplyHistoryPayload> {
|
|
809
|
+
return this.request<StablecoinSupplyHistoryPayload>(
|
|
810
|
+
`/cloud/crypto/stablecoins/supply/${encodeURIComponent(symbol)}`,
|
|
811
|
+
{ signal: AbortSignal.timeout(30_000) },
|
|
812
|
+
);
|
|
813
|
+
}
|
|
814
|
+
|
|
707
815
|
async getCloudCentralBankRates(): Promise<CentralBankRatesPayload> {
|
|
708
816
|
return this.request<CentralBankRatesPayload>("/cloud/econ/central-bank-rates", { signal: AbortSignal.timeout(45_000) });
|
|
709
817
|
}
|
|
@@ -725,6 +833,10 @@ export class CloudDataApi {
|
|
|
725
833
|
return this.request<DebtMaturitiesPayload>(cloudDebtMaturitiesPath(symbol, listing), { signal: AbortSignal.timeout(45_000) });
|
|
726
834
|
}
|
|
727
835
|
|
|
836
|
+
async getCloudBankFigures(symbol: string): Promise<BankFiguresPayload> {
|
|
837
|
+
return this.request<BankFiguresPayload>(cloudBankFiguresPath(symbol), { signal: AbortSignal.timeout(30_000) });
|
|
838
|
+
}
|
|
839
|
+
|
|
728
840
|
async getCloudRevenueBreakdown(symbol: string, view?: RevenueBreakdownView, listing?: IssuerListingParams): Promise<RevenueBreakdownPayload> {
|
|
729
841
|
return this.request<RevenueBreakdownPayload>(cloudRevenueBreakdownPath(symbol, view, listing), { signal: AbortSignal.timeout(30_000) });
|
|
730
842
|
}
|
|
@@ -872,6 +984,14 @@ export class CloudDataApi {
|
|
|
872
984
|
);
|
|
873
985
|
}
|
|
874
986
|
|
|
987
|
+
async getCloudEarningsCallAudio(
|
|
988
|
+
id: string,
|
|
989
|
+
): Promise<CloudEarningsCallAudioPayload> {
|
|
990
|
+
return this.request<CloudEarningsCallAudioPayload>(
|
|
991
|
+
cloudEarningsCallAudioPath(id),
|
|
992
|
+
);
|
|
993
|
+
}
|
|
994
|
+
|
|
875
995
|
// A listing outside the US also sends its venue and company (listingAbroad).
|
|
876
996
|
async getProxyStatements(
|
|
877
997
|
ticker: string,
|
|
@@ -934,6 +1054,15 @@ export class CloudDataApi {
|
|
|
934
1054
|
});
|
|
935
1055
|
}
|
|
936
1056
|
|
|
1057
|
+
async getCloudSecInsiderSignals(
|
|
1058
|
+
params: CloudInsiderSignalsParams = {},
|
|
1059
|
+
options?: { signal?: AbortSignal },
|
|
1060
|
+
): Promise<InsiderSignalsPayload> {
|
|
1061
|
+
return this.request<InsiderSignalsPayload>(cloudSecInsiderSignalsPath(params), {
|
|
1062
|
+
signal: options?.signal,
|
|
1063
|
+
});
|
|
1064
|
+
}
|
|
1065
|
+
|
|
937
1066
|
async getCloudSecFilingDocuments(
|
|
938
1067
|
params: CloudSecFilingParams,
|
|
939
1068
|
): Promise<CloudSecDocumentsResponse> {
|
|
@@ -51,6 +51,22 @@ export interface DebtHistoryPoint {
|
|
|
51
51
|
borrowingCostPercent: number | null;
|
|
52
52
|
interestExpenseTag: string | null;
|
|
53
53
|
borrowingCostDebtTags: string | null;
|
|
54
|
+
/** SEC's fiscal year for the period, when the server sends it. */
|
|
55
|
+
fy?: number | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The debt a 10-Q filed after the annual schedule reports on its balance
|
|
59
|
+
* sheet date: what is due within a year and what is due later.
|
|
60
|
+
*/
|
|
61
|
+
export interface DebtQuarter {
|
|
62
|
+
asOf: string;
|
|
63
|
+
filed: string;
|
|
64
|
+
accession: string;
|
|
65
|
+
form: string;
|
|
66
|
+
currency: string;
|
|
67
|
+
filingUrl: string;
|
|
68
|
+
current: DebtFact | null;
|
|
69
|
+
noncurrent: DebtFact | null;
|
|
54
70
|
}
|
|
55
71
|
export interface DebtMaturitiesPayload {
|
|
56
72
|
version: 1;
|
|
@@ -88,5 +104,7 @@ export interface DebtMaturitiesPayload {
|
|
|
88
104
|
borrowingCostEvidence: DebtBorrowingCost | null;
|
|
89
105
|
};
|
|
90
106
|
history: DebtHistoryPoint[];
|
|
107
|
+
/** The latest 10-Q when it is newer than `latest`. Older servers and cached payloads leave it out. */
|
|
108
|
+
latestQuarter?: DebtQuarter | null;
|
|
91
109
|
warnings: string[];
|
|
92
110
|
}
|
|
@@ -27,6 +27,8 @@ interface EarningsRealizedMove {
|
|
|
27
27
|
afterClose: number;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
type EarningsActualSource = "calendar" | "press-release";
|
|
31
|
+
|
|
30
32
|
export interface EarningsReport {
|
|
31
33
|
symbol: string;
|
|
32
34
|
name: string | null;
|
|
@@ -43,6 +45,12 @@ export interface EarningsReport {
|
|
|
43
45
|
/** For an upcoming report, the consensus every earnings view shows, with `epsAnalysts` behind it. */
|
|
44
46
|
epsEstimate: number | null;
|
|
45
47
|
epsActual: number | null;
|
|
48
|
+
/**
|
|
49
|
+
* Where `epsActual` comes from: `press-release` is the company's own
|
|
50
|
+
* release, read the day it reports and provisional until the calendar's
|
|
51
|
+
* figure replaces it. Absent from older servers.
|
|
52
|
+
*/
|
|
53
|
+
epsActualSource?: EarningsActualSource | null;
|
|
46
54
|
epsAnalysts: number | null;
|
|
47
55
|
revenueEstimate: number | null;
|
|
48
56
|
revenueAnalysts: number | null;
|
|
@@ -69,6 +77,8 @@ export interface EarningsCalendarPayload {
|
|
|
69
77
|
|
|
70
78
|
interface EarningsHistoryReport extends EarningsReport {
|
|
71
79
|
revenueActual: number | null;
|
|
80
|
+
/** `press-release` until the statements have the quarter; absent from older servers. */
|
|
81
|
+
revenueActualSource?: "statements" | "press-release" | null;
|
|
72
82
|
}
|
|
73
83
|
|
|
74
84
|
export interface EarningsHistoryPayload {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Cited company disclosures; Pro, omitted by older servers. */
|
|
2
2
|
export const KPI_FIELDS = ["kpiArr", "kpiNrrPercent", "kpiRpo", "kpiCrpo", "kpiSubscribers", "kpiDau", "kpiMau", "kpiGmv", "kpiTakeRatePercent", "kpiSameStoreSalesPercent", "kpiStores", "kpiBacklog", "kpiBookToBill", "kpiNimPercent", "kpiCet1Percent", "kpiCombinedRatioPercent", "kpiOccupancyPercent", "kpiLoadFactorPercent", "guideRevenueChangePercent", "guideEpsChangePercent"] as const;
|
|
3
|
+
/** Payout ratio and dividend growth; listed only when asked (`include=dividends`), and omitted by a server from before them. */
|
|
4
|
+
export const DIVIDEND_FIELDS = ["payoutRatioPercent", "dividendGrowth1YPercent", "dividendGrowth3YPercent"] as const;
|
|
3
5
|
export const NUMERIC_FIELDS = [
|
|
4
6
|
...KPI_FIELDS,
|
|
5
7
|
"price",
|
|
@@ -12,6 +14,7 @@ export const NUMERIC_FIELDS = [
|
|
|
12
14
|
"forwardPE",
|
|
13
15
|
"enterpriseToRevenue",
|
|
14
16
|
"dividendYieldPercent",
|
|
17
|
+
...DIVIDEND_FIELDS,
|
|
15
18
|
"revenueGrowthPercent",
|
|
16
19
|
"earningsGrowthPercent",
|
|
17
20
|
"grossMarginPercent",
|
package/src/api-client/errors.ts
CHANGED
|
@@ -50,6 +50,17 @@ export function isPermanentClientError(error: unknown): boolean {
|
|
|
50
50
|
return status !== undefined && status >= 400 && status < 500 && status !== 408 && status !== 429;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
/**
|
|
54
|
+
* A failure asking again shortly may get past: a timeout, a rate limit or an
|
|
55
|
+
* overloaded server (408, 429, 5xx), or a market answer the service marked
|
|
56
|
+
* `retryable_error` because its own upstream was rate limited or timed out.
|
|
57
|
+
*/
|
|
58
|
+
export function isRetryableApiError(error: unknown): boolean {
|
|
59
|
+
if (!(error instanceof ApiRequestError)) return false;
|
|
60
|
+
const status = error.status;
|
|
61
|
+
return error.code === "retryable_error" || status === 408 || status === 429 || (status !== undefined && status >= 500);
|
|
62
|
+
}
|
|
63
|
+
|
|
53
64
|
/** Reads `Retry-After` as milliseconds, accepting seconds or an HTTP date. */
|
|
54
65
|
export function parseRetryAfterMs(
|
|
55
66
|
header: string | null,
|
|
@@ -97,6 +108,7 @@ export function parseApiErrorDetails(body: string): Readonly<Record<string, unkn
|
|
|
97
108
|
const parsed = JSON.parse(body) as unknown;
|
|
98
109
|
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed as Record<string, unknown> : undefined;
|
|
99
110
|
} catch {
|
|
111
|
+
// Intentional ignore: Non-JSON error responses retain their HTTP status and original body.
|
|
100
112
|
return undefined;
|
|
101
113
|
}
|
|
102
114
|
}
|
|
@@ -107,6 +119,7 @@ export function parseApiErrorCode(body: string): string | undefined {
|
|
|
107
119
|
const parsed = JSON.parse(body) as Record<string, unknown> | null;
|
|
108
120
|
return typeof parsed?.error === "string" && parsed.error ? parsed.error : undefined;
|
|
109
121
|
} catch {
|
|
122
|
+
// Intentional ignore: Non-JSON error responses retain their HTTP status and original body.
|
|
110
123
|
return undefined;
|
|
111
124
|
}
|
|
112
125
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** One published figure: when it is as of and who published it (the fund's sponsor, or Gloom Cloud for a computed one). */
|
|
2
|
+
interface FundFact<T> {
|
|
3
|
+
value: T;
|
|
4
|
+
asOf: string | null;
|
|
5
|
+
source: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
type FundStructure = "registered" | "trust";
|
|
10
|
+
type ExpenseRatioKind = "net" | "gross" | "sponsor-fee";
|
|
11
|
+
/**
|
|
12
|
+
* A bond fund as its sponsor classes it: `municipal` when its interest is
|
|
13
|
+
* exempt from federal income tax, `taxable` otherwise.
|
|
14
|
+
*/
|
|
15
|
+
type BondFundClass = "municipal" | "taxable";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* What a bond fund's sponsor publishes about its yield and rate risk, each
|
|
19
|
+
* figure dated. The 30-day SEC yield is the standardized yield (net
|
|
20
|
+
* investment income of the last 30 days, annualized, over the offering
|
|
21
|
+
* price); a distribution yield annualizes cash paid and is not it.
|
|
22
|
+
*/
|
|
23
|
+
export interface FundBondFacts {
|
|
24
|
+
kind: BondFundClass;
|
|
25
|
+
/** A single-state municipal fund's state (`CA`, `NY`); null for a national fund. */
|
|
26
|
+
state: string | null;
|
|
27
|
+
/** Percent. */
|
|
28
|
+
secYield: FundFact<number> | null;
|
|
29
|
+
/** Percent. */
|
|
30
|
+
yieldToWorst: FundFact<number> | null;
|
|
31
|
+
/** Years: `effective` (option-adjusted) duration, or Vanguard's month-end `average` duration. */
|
|
32
|
+
duration: (FundFact<number> & { measure: "effective" | "average" }) | null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* `not-collected-yet`: a source Gloom reads covers the fund, but it has no
|
|
37
|
+
* figures yet. `not-published`: no source Gloom reads covers it. Servers
|
|
38
|
+
* before statuses leave it out.
|
|
39
|
+
*/
|
|
40
|
+
type FundFactsStatus = "covered" | "not-collected-yet" | "not-published" | "not-a-fund";
|
|
41
|
+
|
|
42
|
+
/** GET /cloud/fund-facts/:ticker. Percent fields are in percent (0.03 is 0.03%). */
|
|
43
|
+
export interface FundFactsPayload {
|
|
44
|
+
ticker: string;
|
|
45
|
+
covered: boolean;
|
|
46
|
+
status?: FundFactsStatus;
|
|
47
|
+
/** Why there are no facts, when `covered` is false. */
|
|
48
|
+
reason?: string;
|
|
49
|
+
name: string | null;
|
|
50
|
+
/** `trust`: an exchange-traded trust or pool outside the 1940 Act, charging a sponsor fee. */
|
|
51
|
+
structure: FundStructure | null;
|
|
52
|
+
/** `document`: read from the fund's prospectus filed with the SEC on `asOf`, not from its sponsor. */
|
|
53
|
+
expenseRatio: (FundFact<number> & { kind: ExpenseRatioKind; document?: "prospectus" }) | null;
|
|
54
|
+
nav: FundFact<number> | null;
|
|
55
|
+
closingPrice: FundFact<number> | null;
|
|
56
|
+
/** `published` by the sponsor, or `computed` from the closing price against the NAV. */
|
|
57
|
+
premiumDiscount: (FundFact<number> & { basis: "published" | "computed" }) | null;
|
|
58
|
+
/**
|
|
59
|
+
* `period`: a `day`'s figure, or the last `month-end`'s (Vanguard and ARK
|
|
60
|
+
* ETFs, N-PORT), which is not today's. `document`: the fund's N-PORT report
|
|
61
|
+
* to the SEC for that month end.
|
|
62
|
+
*/
|
|
63
|
+
netAssets: (FundFact<number> & { scope: "share-class" | "fund" | null; period?: "day" | "month-end"; document?: "N-PORT" }) | null;
|
|
64
|
+
sponsor: FundFact<string> | null;
|
|
65
|
+
inception: FundFact<string> | null;
|
|
66
|
+
index: FundFact<string> | null;
|
|
67
|
+
/** A bond fund's SEC yield, yield to worst and duration; null for any other fund. Servers before it leave it out. */
|
|
68
|
+
bond?: FundBondFacts | null;
|
|
69
|
+
/** The newest NAV is older than a few US trading days: every figure is older than it looks. */
|
|
70
|
+
stale: boolean;
|
|
71
|
+
fetchedAt: string | null;
|
|
72
|
+
}
|