gloomberb 0.17.6 → 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 +6 -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/credit-boards.ts +21 -1
- package/src/api-client/crypto-markets.ts +88 -1
- package/src/api-client/data.ts +104 -4
- package/src/api-client/debt-maturities.ts +18 -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 +25 -2
- package/src/api-client/insider-signals.ts +95 -11
- package/src/api-client/normalizers.ts +1 -0
- package/src/api-client/paths.ts +20 -1
- package/src/api-client/request.ts +11 -3
- package/src/api-client/research-activity.ts +15 -8
- package/src/api-client/socket.ts +6 -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 +66 -2
- 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/desktop-deeplink.ts +3 -4
- package/src/app/runtime/plugin-bindings.ts +3 -2
- package/src/app/runtime/startup.ts +3 -4
- package/src/app/runtime/ticker-refresh.ts +13 -12
- package/src/app/runtime/update.ts +3 -2
- package/src/architecture/core-builtin-allowlist.json +0 -3
- 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/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 +2 -1
- 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 +340 -69
- package/src/cli/commands/news-search.ts +35 -2
- package/src/cli/commands/options-chain.ts +7 -5
- package/src/cli/commands/options-leaps.ts +3 -3
- package/src/cli/commands/overview.ts +78 -29
- 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 +337 -60
- package/src/cli/context.ts +2 -1
- package/src/cli/desktop-pane-shot.ts +11 -3
- package/src/cli/earnings-calendar.ts +2 -1
- package/src/cli/errors.ts +10 -0
- package/src/cli/export-source.ts +18 -3
- package/src/cli/glossary.ts +196 -14
- package/src/cli/history-rows.ts +60 -9
- package/src/cli/index-roots.ts +26 -0
- package/src/cli/index.ts +34 -9
- package/src/cli/known-gaps.ts +156 -22
- package/src/cli/listing-arg.ts +156 -12
- package/src/cli/listing-suggestion.ts +4 -2
- 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 +94 -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 +49 -8
- package/src/cli/pane-functions/function-help.ts +13 -10
- package/src/cli/pane-functions/headless.ts +177 -42
- package/src/cli/pane-functions/index.ts +64 -8
- 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 +48 -13
- package/src/cli/pane-functions/screenshot.ts +124 -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 +10 -2
- 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 -34
- 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/components/chart/composite/axis-overlays.tsx +16 -9
- package/src/components/chart/composite/composite-chart.tsx +85 -6
- package/src/components/chart/composite/downsample.ts +19 -3
- package/src/components/chart/composite/format.ts +3 -0
- package/src/components/chart/composite/legend.tsx +155 -76
- package/src/components/chart/composite/panel-bitmap.ts +8 -2
- package/src/components/chart/composite/panel-surface.tsx +3 -3
- package/src/components/chart/composite/toolbar.tsx +12 -7
- package/src/components/chart/composite/types.ts +6 -0
- package/src/components/chart/composite/use-composite-chart-keyboard.ts +28 -1
- 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 +10 -3
- 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 +5 -0
- package/src/components/command-bar/list/view.tsx +1 -1
- 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/provider-search.ts +3 -9
- package/src/components/command-bar/routes/root/results.ts +13 -0
- package/src/components/command-bar/routes/root/start-here.ts +90 -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/theme-picker.tsx +3 -1
- package/src/components/command-bar/workflow/builtin.ts +5 -1
- package/src/components/command-bar/workflow/collection-actions.ts +21 -12
- package/src/components/command-bar/workflow/ops.ts +21 -1
- 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 +6 -4
- 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/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 +8 -2
- 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-positions.ts +40 -11
- 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/index.tsx +2 -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/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/list-view.tsx +8 -0
- package/src/components/ui/prose.tsx +97 -25
- package/src/components/ui/query-bar-keys.tsx +3 -1
- package/src/components/ui/query-bar.tsx +6 -0
- 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/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/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/gallery-desktop.tsx +8 -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 +6 -5
- package/src/market-data/futures-contract.ts +102 -5
- package/src/market-data/hooks.tsx +20 -11
- package/src/market-data/market/bar-period.ts +36 -0
- package/src/market-data/market/format.ts +5 -13
- package/src/market-data/market/freshness.ts +1 -3
- package/src/market-data/market/index-level.ts +51 -0
- package/src/market-data/model-dividend-yield.ts +57 -16
- package/src/market-data/quotes/live-valuation.ts +48 -2
- 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 +47 -9
- package/src/plugins/builtin/analytics/risk-headless.ts +14 -2
- package/src/plugins/builtin/analytics/risk-math.ts +83 -0
- package/src/plugins/builtin/analytics/risk-model.ts +97 -4
- package/src/plugins/builtin/analytics/risk-pane.tsx +11 -6
- 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/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/desktop-view.tsx +2 -2
- package/src/plugins/builtin/chart-composer/headless-schema.ts +10 -2
- package/src/plugins/builtin/chart-composer/headless.ts +99 -21
- package/src/plugins/builtin/chart-composer/index.tsx +70 -13
- package/src/plugins/builtin/chart-composer/pane.tsx +65 -15
- package/src/plugins/builtin/chart-composer/presets.ts +79 -11
- package/src/plugins/builtin/chart-composer/series-catalog.ts +50 -14
- package/src/plugins/builtin/chart-composer/series-expression.ts +9 -7
- 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/chat/attachments/desktop.tsx +4 -1
- 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 +35 -5
- package/src/plugins/builtin/chat/content/layout-metrics.ts +3 -0
- package/src/plugins/builtin/chat/content/shortcuts.ts +32 -13
- package/src/plugins/builtin/chat/content/snapshot.ts +29 -6
- package/src/plugins/builtin/chat/ghost-user.ts +11 -3
- package/src/plugins/builtin/chat/layout.ts +2 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +13 -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/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/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/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 +8 -5
- package/src/plugins/builtin/commodities-energy/view-state.ts +11 -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/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/headless.ts +3 -2
- 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 +8 -1
- package/src/plugins/builtin/econ-statistics/headless.ts +26 -5
- package/src/plugins/builtin/econ-statistics/pane.tsx +4 -2
- package/src/plugins/builtin/econ-statistics/stats.ts +10 -0
- package/src/plugins/builtin/econ-statistics/view.ts +19 -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 +34 -21
- 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/headless.ts +4 -2
- package/src/plugins/builtin/futures-curve/model.ts +5 -7
- 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 +311 -41
- package/src/plugins/builtin/insider/index.tsx +280 -106
- 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 +135 -11
- package/src/plugins/builtin/insider/signals-model.ts +628 -56
- package/src/plugins/builtin/insider/signals.tsx +283 -83
- 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/headless.ts +2 -0
- package/src/plugins/builtin/jobs/headless.ts +1 -0
- package/src/plugins/builtin/jobs/index.tsx +1 -0
- package/src/plugins/builtin/jodi/headless.ts +2 -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-valuation/pane.tsx +1 -1
- 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-scenario/client.ts +7 -4
- package/src/plugins/builtin/options-scenario/headless.ts +5 -3
- 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 +108 -46
- package/src/plugins/builtin/portfolio-list/cli/render.ts +368 -45
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +8 -2
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +24 -34
- package/src/plugins/builtin/portfolio-list/grid.tsx +3 -1
- package/src/plugins/builtin/portfolio-list/headless.ts +151 -29
- 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 +27 -10
- package/src/plugins/builtin/portfolio-list/pane/supplemental.ts +47 -28
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +3 -2
- package/src/plugins/builtin/portfolio-list/quick-add/resolution.ts +10 -3
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +26 -4
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +31 -3
- package/src/plugins/builtin/portfolio-list/table.tsx +25 -5
- 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 +2 -0
- package/src/plugins/builtin/research/event-model.ts +22 -2
- package/src/plugins/builtin/research/headless-schema.ts +1 -0
- package/src/plugins/builtin/research/headless.ts +3 -0
- 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 +9 -6
- package/src/plugins/builtin/reverse-dcf/index.tsx +2 -2
- package/src/plugins/builtin/reverse-dcf/model.ts +51 -4
- package/src/plugins/builtin/reverse-dcf/pane.tsx +23 -10
- 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/headless-options.ts +10 -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 +25 -9
- package/src/plugins/builtin/shared/scanner-capture.ts +95 -0
- package/src/plugins/builtin/shared/treasury-cutoffs.ts +15 -0
- package/src/plugins/builtin/shared/use-quote-board.ts +1 -0
- 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/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 +22 -8
- package/src/plugins/builtin/ticker-detail/data-panes/history-bars.ts +17 -1
- 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.ts +23 -10
- 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 +36 -3
- 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 +8 -5
- 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 +74 -12
- package/src/{plugins/builtin/portfolio-list → portfolio}/column-values.ts +140 -53
- 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/portfolio/mutations.ts +54 -10
- package/src/portfolio/position-metrics.ts +44 -10
- package/src/portfolio/valuation-basis.ts +31 -4
- package/src/public/__snapshots__/public-api.test.ts.snap +4 -0
- package/src/public/time-series.ts +2 -1
- package/src/remote/confirm-change.tsx +2 -1
- package/src/remote/server.ts +1 -1
- package/src/remote/watchlist.ts +9 -1
- 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 +6 -4
- 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 +3 -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/electrobun/bun/core-capabilities.ts +1 -1
- package/src/renderers/electrobun/bun/desktop/backend.ts +1 -1
- 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/workspace/requests.ts +5 -1
- 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/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/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 -13
- package/src/state/app/tab-cursor.ts +149 -12
- 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 +58 -15
- 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/theme/colors.ts +2 -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 +49 -9
- package/src/tickers/listing-venues.ts +24 -5
- package/src/tickers/open-target.ts +13 -5
- package/src/tickers/search/index.ts +112 -35
- package/src/tickers/search/ranking.ts +49 -1
- package/src/tickers/terminal-codes.ts +79 -0
- package/src/tickers/ticker-changes.ts +74 -3
- package/src/tickers/us-listing.ts +2 -1
- package/src/time-series/chart-data.ts +79 -8
- package/src/time-series/fundamentals.ts +55 -7
- package/src/time-series/ice-credit.ts +17 -2
- package/src/time-series/live-bars.ts +21 -8
- package/src/time-series/live-quotes.ts +2 -3
- package/src/time-series/price-comparison.ts +6 -1
- package/src/time-series/resolve.ts +65 -10
- package/src/time-series/spec.ts +2 -1
- package/src/time-series/studies.ts +3 -3
- package/src/time-series/types.ts +22 -0
- package/src/time-series/use-chart-resolution.ts +2 -1
- package/src/types/config.ts +7 -0
- package/src/types/data-provider.ts +20 -0
- package/src/types/headless.ts +142 -1
- package/src/types/instrument.ts +6 -0
- package/src/types/plugin.ts +32 -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 +40 -4
- package/src/ui/measured-cells.ts +13 -7
- package/src/ui/qr.ts +7 -5
- package/src/updater/index.ts +5 -5
- 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/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/futures-generic.ts +34 -8
- package/src/utils/http-proxy-response.ts +2 -1
- 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/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/url.ts +1 -0
- package/src/utils/utc-time.ts +11 -0
- package/src/plugins/builtin/chat/share/targets.ts +0 -27
- package/src/renderers/dom/host/top-surface.ts +0 -119
- package/src/shares/dialog.tsx +0 -221
- package/src/shares/live.ts +0 -19
|
@@ -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";
|
|
@@ -44,8 +45,9 @@ import type { JodiBoardPayload, PsdBoardPayload } from "./commodity-balances";
|
|
|
44
45
|
import type { CarbonBoard, CarbonHistory, EuropePowerBoard, EuropePowerHistory, GasStorageBoard, GasStorageHistory, GasStorageSeasonal } from "./europe-energy";
|
|
45
46
|
import type { GpuBoardPayload, GpuEventsPayload, GpuHistoryPayload, GpuHistoryQuery } from "./gpu";
|
|
46
47
|
import type { CpiBoardPayload } from "./cpi";
|
|
47
|
-
import type { TapeSnapshot } from "./tape";
|
|
48
|
+
import type { TapeRange, TapeSnapshot } from "./tape";
|
|
48
49
|
import { signalWithTimeout } from "../utils/async-deadline";
|
|
50
|
+
import { ApiRequestError } from "./errors";
|
|
49
51
|
import type { ExchangeRateSnapshot } from "../types/exchange-rate";
|
|
50
52
|
import type { RatePathPayload } from "./rates";
|
|
51
53
|
import type { EarningsCalendarPayload, EarningsCalendarQuery, EarningsHistoryPayload } from "./earnings";
|
|
@@ -67,6 +69,7 @@ import {
|
|
|
67
69
|
cloudCdsPath,
|
|
68
70
|
cloudCongressHousePath,
|
|
69
71
|
cloudEarningsCallsPath,
|
|
72
|
+
cloudEarningsCallAudioPath,
|
|
70
73
|
cloudEarningsTranscriptPath,
|
|
71
74
|
cloudJobsMoversPath,
|
|
72
75
|
cloudJobsPath,
|
|
@@ -74,6 +77,7 @@ import {
|
|
|
74
77
|
type CloudJobsPostingsParams,
|
|
75
78
|
type IssuerListingParams,
|
|
76
79
|
cloudProxyStatementPath,
|
|
80
|
+
cloudBankFiguresPath,
|
|
77
81
|
cloudDebtMaturitiesPath,
|
|
78
82
|
cloudFilingEventsPath,
|
|
79
83
|
cloudRiskReportPath,
|
|
@@ -122,6 +126,7 @@ import type {
|
|
|
122
126
|
CloudCdsResponse,
|
|
123
127
|
CloudCongressHousePayload,
|
|
124
128
|
CloudEarningsCallListPayload,
|
|
129
|
+
CloudEarningsCallAudioPayload,
|
|
125
130
|
CloudEarningsTranscriptPayload,
|
|
126
131
|
CloudJobsMoversPayload,
|
|
127
132
|
CloudJobsPostingsPayload,
|
|
@@ -169,6 +174,26 @@ import type {
|
|
|
169
174
|
} from "./types";
|
|
170
175
|
import type { CloudApiRequest } from "./request";
|
|
171
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
|
+
|
|
172
197
|
export class CloudDataApi {
|
|
173
198
|
constructor(private readonly request: CloudApiRequest) {}
|
|
174
199
|
|
|
@@ -208,6 +233,11 @@ export class CloudDataApi {
|
|
|
208
233
|
return this.request<import("./members").FundMembersPayload>(`/cloud/members/${encodeURIComponent(fund)}`);
|
|
209
234
|
}
|
|
210
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
|
+
|
|
211
241
|
getFundChanges(fund: string) {
|
|
212
242
|
return this.request<import("./members").FundChangesPayload>(`/cloud/members/${encodeURIComponent(fund)}/changes`);
|
|
213
243
|
}
|
|
@@ -237,6 +267,10 @@ export class CloudDataApi {
|
|
|
237
267
|
const response = await this.request<
|
|
238
268
|
CloudMarketResponse<InstrumentSearchResult[]>
|
|
239
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
|
+
}
|
|
240
274
|
return response.data ?? [];
|
|
241
275
|
}
|
|
242
276
|
|
|
@@ -402,6 +436,40 @@ export class CloudDataApi {
|
|
|
402
436
|
);
|
|
403
437
|
}
|
|
404
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
|
+
|
|
405
473
|
/** The listed company each organization name resolves to, if any: a trial's lead sponsors, a page at a time. */
|
|
406
474
|
async getCloudOrganizationTickers(names: readonly string[], signal?: AbortSignal): Promise<OrganizationTickersResponse> {
|
|
407
475
|
return this.request<OrganizationTickersResponse>("/market/organization-tickers", {
|
|
@@ -458,6 +526,11 @@ export class CloudDataApi {
|
|
|
458
526
|
return this.request<CloudEconEventPayload[]>("/cloud/econ/calendar");
|
|
459
527
|
}
|
|
460
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
|
+
|
|
461
534
|
async getCloudMacroReleaseDays(): Promise<CloudMacroReleaseDaysPayload> {
|
|
462
535
|
return this.request<CloudMacroReleaseDaysPayload>("/cloud/econ/release-days");
|
|
463
536
|
}
|
|
@@ -692,8 +765,10 @@ export class CloudDataApi {
|
|
|
692
765
|
return this.request<CpiBoardPayload>("/cloud/cpi/board");
|
|
693
766
|
}
|
|
694
767
|
|
|
695
|
-
|
|
696
|
-
|
|
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) });
|
|
697
772
|
}
|
|
698
773
|
|
|
699
774
|
async getCloudYieldCurve(): Promise<CloudYieldPointPayload[]> {
|
|
@@ -724,6 +799,19 @@ export class CloudDataApi {
|
|
|
724
799
|
return this.request<CryptoMarketsPayload>("/cloud/crypto/markets", { signal: AbortSignal.timeout(45_000) });
|
|
725
800
|
}
|
|
726
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
|
+
|
|
727
815
|
async getCloudCentralBankRates(): Promise<CentralBankRatesPayload> {
|
|
728
816
|
return this.request<CentralBankRatesPayload>("/cloud/econ/central-bank-rates", { signal: AbortSignal.timeout(45_000) });
|
|
729
817
|
}
|
|
@@ -745,6 +833,10 @@ export class CloudDataApi {
|
|
|
745
833
|
return this.request<DebtMaturitiesPayload>(cloudDebtMaturitiesPath(symbol, listing), { signal: AbortSignal.timeout(45_000) });
|
|
746
834
|
}
|
|
747
835
|
|
|
836
|
+
async getCloudBankFigures(symbol: string): Promise<BankFiguresPayload> {
|
|
837
|
+
return this.request<BankFiguresPayload>(cloudBankFiguresPath(symbol), { signal: AbortSignal.timeout(30_000) });
|
|
838
|
+
}
|
|
839
|
+
|
|
748
840
|
async getCloudRevenueBreakdown(symbol: string, view?: RevenueBreakdownView, listing?: IssuerListingParams): Promise<RevenueBreakdownPayload> {
|
|
749
841
|
return this.request<RevenueBreakdownPayload>(cloudRevenueBreakdownPath(symbol, view, listing), { signal: AbortSignal.timeout(30_000) });
|
|
750
842
|
}
|
|
@@ -892,6 +984,14 @@ export class CloudDataApi {
|
|
|
892
984
|
);
|
|
893
985
|
}
|
|
894
986
|
|
|
987
|
+
async getCloudEarningsCallAudio(
|
|
988
|
+
id: string,
|
|
989
|
+
): Promise<CloudEarningsCallAudioPayload> {
|
|
990
|
+
return this.request<CloudEarningsCallAudioPayload>(
|
|
991
|
+
cloudEarningsCallAudioPath(id),
|
|
992
|
+
);
|
|
993
|
+
}
|
|
994
|
+
|
|
895
995
|
// A listing outside the US also sends its venue and company (listingAbroad).
|
|
896
996
|
async getProxyStatements(
|
|
897
997
|
ticker: string,
|
|
@@ -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
|
}
|
|
@@ -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
|
+
}
|
|
@@ -32,14 +32,27 @@ export interface FuturesContractTermsPayload {
|
|
|
32
32
|
settlement: { price: number; date: string } | null
|
|
33
33
|
/**
|
|
34
34
|
* For a continuous symbol (CL=F) or a front generic: the nearest contract
|
|
35
|
-
* still trading
|
|
36
|
-
*
|
|
35
|
+
* still trading once the symbol has rolled past it on its roll date, with
|
|
36
|
+
* its last trade; null when it prices the nearest itself. Absent from
|
|
37
37
|
* servers that do not send it.
|
|
38
38
|
*/
|
|
39
39
|
nearest?: FuturesNearestContract | null
|
|
40
|
+
/**
|
|
41
|
+
* For a continuous symbol or a generic: how it rolls ("1 day before last
|
|
42
|
+
* trade") and the first session it is on the next contract; the date is
|
|
43
|
+
* null under the open interest switch. Absent from older servers.
|
|
44
|
+
*/
|
|
45
|
+
roll?: { label: string; date: string | null } | null
|
|
46
|
+
/**
|
|
47
|
+
* The root's front contract (what its continuous symbol and first generic
|
|
48
|
+
* price) when the symbol prices another one (NGF27, NG2); null on the front.
|
|
49
|
+
*/
|
|
50
|
+
front?: FuturesNearestContract | null
|
|
51
|
+
/** The contract that traded the most on the root's newest session with volumes: the day's volume alone. */
|
|
52
|
+
mostActive?: FuturesMostActiveContract | null
|
|
40
53
|
}
|
|
41
54
|
|
|
42
|
-
/**
|
|
55
|
+
/** A listed contract by its code, as the quote endpoints take it (CLX26.NYM), and its last trade. */
|
|
43
56
|
interface FuturesNearestContract {
|
|
44
57
|
contract: string
|
|
45
58
|
contractSymbol: string
|
|
@@ -48,6 +61,16 @@ interface FuturesNearestContract {
|
|
|
48
61
|
lastTrade: string | null
|
|
49
62
|
}
|
|
50
63
|
|
|
64
|
+
/** The most active contract: its volume on that session (`date`). */
|
|
65
|
+
interface FuturesMostActiveContract {
|
|
66
|
+
contract: string
|
|
67
|
+
contractSymbol: string
|
|
68
|
+
/** YYYY-MM */
|
|
69
|
+
deliveryMonth: string
|
|
70
|
+
volume: number
|
|
71
|
+
date: string
|
|
72
|
+
}
|
|
73
|
+
|
|
51
74
|
/** Gloom Cloud futures prices retain provider denomination and explicit quote units. */
|
|
52
75
|
export interface FuturesContract {
|
|
53
76
|
symbol: string
|
package/src/api-client/geo.ts
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* `geo_unavailable`. A layer that cannot serve still answers 200 with an
|
|
10
10
|
* empty body and its `status` and `statusNote`.
|
|
11
11
|
*/
|
|
12
|
+
import { logFailure } from "../utils/log-failure";
|
|
13
|
+
|
|
12
14
|
type Lon = number;
|
|
13
15
|
type Lat = number;
|
|
14
16
|
|
|
@@ -79,6 +81,12 @@ export interface GeoLayerInfo {
|
|
|
79
81
|
status: GeoLayerStatus;
|
|
80
82
|
/** Short plain words, never a source name. */
|
|
81
83
|
statusNote?: string;
|
|
84
|
+
/**
|
|
85
|
+
* Who published the data, as a reader cites it (`IMF PortWatch`), when the
|
|
86
|
+
* server names one: a public institution, never a vendor. Reports cite it
|
|
87
|
+
* as their source and publisher; absent, they cite Gloom Cloud.
|
|
88
|
+
*/
|
|
89
|
+
publisher?: string;
|
|
82
90
|
access: "free" | "pro";
|
|
83
91
|
/** The entity table's columns; the first is the label. */
|
|
84
92
|
columns: GeoColumn[];
|
|
@@ -162,6 +170,8 @@ export interface GeoSeriesPayload {
|
|
|
162
170
|
/** [YYYY-MM-DD, value], oldest first. */
|
|
163
171
|
points: [string, number][];
|
|
164
172
|
asOf: string | null;
|
|
173
|
+
/** Its layer's `publisher`, when the server names one. */
|
|
174
|
+
publisher?: string;
|
|
165
175
|
}
|
|
166
176
|
|
|
167
177
|
/** West, south, east, north in degrees. */
|
|
@@ -329,7 +339,7 @@ export async function loadGeoCatalog(
|
|
|
329
339
|
catalogInFlight = request<unknown>("layers")
|
|
330
340
|
.then(normalizeCatalog)
|
|
331
341
|
// A missing route or a refusal is an answer; a network blip is too, for a while.
|
|
332
|
-
.catch((
|
|
342
|
+
.catch(logFailure("cloud-geo", "Geo catalog request failed", null))
|
|
333
343
|
.then((payload) => {
|
|
334
344
|
catalogEntry = { at: options.now ?? Date.now(), payload };
|
|
335
345
|
return payload;
|
package/src/api-client/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { logFailure } from "../utils/log-failure";
|
|
1
2
|
import {
|
|
2
3
|
isMarketplaceLayoutId,
|
|
3
4
|
parseMarketplaceLayoutEntry,
|
|
@@ -420,6 +421,19 @@ class GloomApiClient {
|
|
|
420
421
|
return this.request<{ url: string }>("/stripe/portal", { method: "POST", body: JSON.stringify({}) });
|
|
421
422
|
}
|
|
422
423
|
|
|
424
|
+
/**
|
|
425
|
+
* Ends the Pro trial and Pro now, unbilled. Call it only once the person
|
|
426
|
+
* confirmed a warning that says so. `endedNow` is false when the server
|
|
427
|
+
* scheduled the cancel at the period end instead: the subscription was no
|
|
428
|
+
* longer in its trial, or the server predates ending a trial early.
|
|
429
|
+
*/
|
|
430
|
+
async endCloudTrial(): Promise<{ canceled: boolean; endedNow?: boolean }> {
|
|
431
|
+
return this.request<{ canceled: boolean; endedNow?: boolean }>("/stripe/subscription/cancel", {
|
|
432
|
+
method: "POST",
|
|
433
|
+
body: JSON.stringify({ endTrialNow: true }),
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
|
|
423
437
|
/**
|
|
424
438
|
* Asks which arm of an app experiment this account or web visitor is in, at the
|
|
425
439
|
* moment it would show. The API counts the answer as the exposure.
|
|
@@ -636,8 +650,9 @@ class GloomApiClient {
|
|
|
636
650
|
reportCommandSearch(report: CommandSearchReport): void {
|
|
637
651
|
try {
|
|
638
652
|
if (!this.isSignedIn()) return;
|
|
639
|
-
void this.telemetry.reportCommandSearch(report).catch((
|
|
640
|
-
} catch {
|
|
653
|
+
void this.telemetry.reportCommandSearch(report).catch(logFailure("cloud-telemetry", "Command search report failed"));
|
|
654
|
+
} catch (error) {
|
|
655
|
+
logFailure("cloud-telemetry", "Command search reporting failed")(error);
|
|
641
656
|
/* A report must never get in the way of the command bar. */
|
|
642
657
|
}
|
|
643
658
|
}
|
|
@@ -758,9 +773,12 @@ class GloomApiClient {
|
|
|
758
773
|
getCloudCorporateActions = this.data.getCloudCorporateActions.bind(this.data);
|
|
759
774
|
getCloudTickerChanges = this.data.getCloudTickerChanges.bind(this.data);
|
|
760
775
|
getCloudOrganizationTickers = this.data.getCloudOrganizationTickers.bind(this.data);
|
|
776
|
+
getCloudTickerChangesBatch = this.data.getCloudTickerChangesBatch.bind(this.data);
|
|
777
|
+
searchInstrumentsBatch = this.data.searchInstrumentsBatch.bind(this.data);
|
|
761
778
|
getCloudHistory = this.data.getCloudHistory.bind(this.data);
|
|
762
779
|
getCloudExchangeRate = this.data.getCloudExchangeRate.bind(this.data);
|
|
763
780
|
getCloudEconomicCalendar = this.data.getCloudEconomicCalendar.bind(this.data);
|
|
781
|
+
getCloudEconomicCalendarFrom = this.data.getCloudEconomicCalendarFrom.bind(this.data);
|
|
764
782
|
getCloudMacroReleaseDays = this.data.getCloudMacroReleaseDays.bind(this.data);
|
|
765
783
|
getCloudEquityDiagnostic = this.data.getCloudEquityDiagnostic.bind(this.data);
|
|
766
784
|
getCloudEarningsCalendar = this.data.getCloudEarningsCalendar.bind(this.data);
|
|
@@ -768,6 +786,8 @@ class GloomApiClient {
|
|
|
768
786
|
getCloudFredSeries = this.data.getCloudFredSeries.bind(this.data);
|
|
769
787
|
getCloudFredSeriesCatalog = this.data.getCloudFredSeriesCatalog.bind(this.data);
|
|
770
788
|
getCloudCryptoMarkets = this.data.getCloudCryptoMarkets.bind(this.data);
|
|
789
|
+
getCloudStablecoinSupply = this.data.getCloudStablecoinSupply.bind(this.data);
|
|
790
|
+
getCloudStablecoinSupplyHistory = this.data.getCloudStablecoinSupplyHistory.bind(this.data);
|
|
771
791
|
getCloudCentralBankRates = this.data.getCloudCentralBankRates.bind(this.data);
|
|
772
792
|
getMobileAlertHistory = this.data.getMobileAlertHistory.bind(this.data);
|
|
773
793
|
getScannerFlowHistory = this.data.getScannerFlowHistory.bind(this.data);
|
|
@@ -777,10 +797,12 @@ class GloomApiClient {
|
|
|
777
797
|
getMemberFunds = this.data.getMemberFunds.bind(this.data);
|
|
778
798
|
getFundMembers = this.data.getFundMembers.bind(this.data);
|
|
779
799
|
getFundChanges = this.data.getFundChanges.bind(this.data);
|
|
800
|
+
getFundFacts = this.data.getFundFacts.bind(this.data);
|
|
780
801
|
getCloudThemes = this.data.getCloudThemes.bind(this.data);
|
|
781
802
|
getCloudThemeMembers = this.data.getCloudThemeMembers.bind(this.data);
|
|
782
803
|
impliedVolatility = this.data.impliedVolatility.bind(this.data);
|
|
783
804
|
optionsPositioning = this.data.optionsPositioning.bind(this.data);
|
|
805
|
+
getCloudBankFigures = this.data.getCloudBankFigures.bind(this.data);
|
|
784
806
|
getCloudDebtMaturities = this.data.getCloudDebtMaturities.bind(this.data);
|
|
785
807
|
getCloudRevenueBreakdown = this.data.getCloudRevenueBreakdown.bind(this.data);
|
|
786
808
|
getCloudMnaDeals = this.data.getCloudMnaDeals.bind(this.data);
|
|
@@ -861,6 +883,7 @@ class GloomApiClient {
|
|
|
861
883
|
getCloudJobsMovers = this.data.getCloudJobsMovers.bind(this.data);
|
|
862
884
|
getCloudEarningsCalls = this.data.getCloudEarningsCalls.bind(this.data);
|
|
863
885
|
getCloudEarningsTranscript = this.data.getCloudEarningsTranscript.bind(this.data);
|
|
886
|
+
getCloudEarningsCallAudio = this.data.getCloudEarningsCallAudio.bind(this.data);
|
|
864
887
|
getProxyStatements = this.data.getProxyStatements.bind(this.data);
|
|
865
888
|
getProxyStatement = this.data.getProxyStatement.bind(this.data);
|
|
866
889
|
getFilingEvents = this.data.getFilingEvents.bind(this.data);
|