gloomberb 0.15.8 → 0.16.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 +10 -2
- package/package.json +1 -1
- package/src/api-client/app-attention.ts +147 -0
- package/src/api-client/attention.ts +26 -0
- package/src/api-client/awards.ts +215 -0
- package/src/api-client/catalysts.ts +160 -0
- package/src/api-client/chat.ts +137 -14
- package/src/api-client/company-kpis.ts +153 -0
- package/src/api-client/cpi.ts +52 -0
- package/src/api-client/credit-documents.ts +107 -0
- package/src/api-client/data.ts +187 -3
- package/src/api-client/distress.ts +164 -0
- package/src/api-client/equity-screener.ts +11 -0
- package/src/api-client/exposure.ts +202 -0
- package/src/api-client/gpu.ts +93 -0
- package/src/api-client/hiring.ts +110 -0
- package/src/api-client/index.ts +77 -3
- package/src/api-client/normalizers.ts +31 -1
- package/src/api-client/perps.ts +127 -0
- package/src/api-client/power.ts +148 -0
- package/src/api-client/request.ts +58 -1
- package/src/api-client/research-activity.ts +172 -13
- package/src/api-client/socket.ts +75 -27
- package/src/api-client/supply-chain-graph.ts +40 -0
- package/src/api-client/supply-chain.ts +98 -0
- package/src/api-client/telemetry.ts +29 -0
- package/src/api-client/themes.ts +28 -0
- package/src/api-client/types.ts +31 -1
- package/src/api-client/wall-experiments.ts +100 -0
- package/src/api-client/wall-summary.ts +49 -0
- package/src/api-client/web-experiments.ts +136 -0
- package/src/app/pane-runtime/plugin-bindings.ts +5 -0
- package/src/app/pane-runtime/ticker-open-runtime.ts +8 -2
- package/src/app/runtime/update.ts +13 -1
- package/src/cli/commands/system.ts +2 -0
- package/src/cli/desktop-pane-shot.ts +3 -4
- package/src/cli/pane-functions/data.ts +78 -0
- package/src/cli/pane-functions/financial-ratio-shot.ts +160 -0
- package/src/cli/pane-functions/function-help.ts +205 -8
- package/src/cli/pane-functions/headless.ts +4 -0
- package/src/cli/pane-functions/screenshot-evidence.ts +21 -0
- package/src/cli/pane-functions/screenshot.ts +49 -5
- package/src/components/chart-table/index.ts +1 -0
- package/src/components/chart-table/layout.ts +15 -0
- package/src/components/command-bar/action-runtime.ts +1 -0
- package/src/components/command-bar/commands/direct/index.ts +32 -0
- package/src/components/command-bar/commands/registry.ts +7 -0
- package/src/components/command-bar/pane-templates/items.ts +11 -0
- package/src/components/command-bar/pane-templates/workflow.ts +19 -4
- package/src/components/command-bar/routes/root/command-items.ts +6 -0
- package/src/components/command-bar/routes/root/provider-search.ts +2 -0
- package/src/components/command-bar/routes/root/results.ts +64 -0
- package/src/components/command-bar/routes/root/runtime.ts +8 -0
- package/src/components/command-bar/routes/ticker-search/results.ts +89 -24
- package/src/components/command-bar/routes/ticker-search/route.ts +2 -0
- package/src/components/command-bar/surface/index.tsx +15 -0
- package/src/components/command-bar/view-model.ts +3 -0
- package/src/components/command-bar/workflow/ops.ts +19 -0
- package/src/components/command-bar/workflow/tickers.ts +5 -0
- package/src/components/company-logo.tsx +15 -2
- package/src/components/data-table/table-pane.ts +2 -1
- package/src/components/index.ts +1 -0
- package/src/components/layout/detached-pane-shell.tsx +12 -1
- package/src/components/layout/missing-pane.tsx +87 -23
- package/src/components/layout/pane/footer/index.tsx +64 -18
- package/src/components/layout/pane/footer/model.ts +85 -0
- package/src/components/layout/pane/sidebar.tsx +19 -1
- package/src/components/layout/shell/pane/management-shortcuts.ts +13 -1
- package/src/components/layout/status-bar.tsx +93 -28
- package/src/components/layout/status-widget-space.ts +72 -0
- package/src/components/onboarding/first-run-workspace.ts +8 -2
- package/src/components/onboarding/onboarding-wizard.tsx +35 -16
- package/src/components/price-performance.tsx +31 -34
- package/src/components/ui/data-table/index.tsx +11 -8
- package/src/components/ui/display.tsx +9 -3
- package/src/components/ui/figure.tsx +94 -0
- package/src/components/ui/icon.tsx +3 -1
- package/src/components/ui/message-composer.tsx +8 -1
- package/src/components/ui/ratio-bar.tsx +84 -0
- package/src/components/ui/toggle.tsx +3 -1
- package/src/components/use-scrollbox-layout.ts +17 -0
- package/src/core/state/app/layout.ts +35 -1
- package/src/core/state/app/state.ts +15 -0
- package/src/core/state/app/types.ts +1 -0
- package/src/data/config/store/normalize.ts +24 -0
- package/src/i18n/es.ts +1 -0
- package/src/i18n/ja.ts +1 -0
- package/src/i18n/ko.ts +1 -0
- package/src/i18n/zh-cn.ts +1 -0
- package/src/i18n/zh-tw.ts +1 -0
- package/src/layout-marketplace/pane-imagery.ts +1 -0
- package/src/market-data/coordinator/entries.ts +13 -0
- package/src/market-data/coordinator/financials.ts +33 -8
- package/src/market-data/market/freshness.ts +16 -5
- package/src/market-data/published-cn-sessions.ts +25 -0
- package/src/market-data/published-nse-sessions.ts +20 -0
- package/src/news/aggregator.ts +4 -0
- package/src/plugins/builtin/account-management/model.ts +6 -1
- package/src/plugins/builtin/account-management/pane.tsx +36 -25
- package/src/plugins/builtin/alerts/catalysts.ts +77 -0
- package/src/plugins/builtin/alerts/events-pane.tsx +3 -0
- package/src/plugins/builtin/alerts/events.ts +10 -4
- package/src/plugins/builtin/alerts/history-pane.tsx +1 -1
- package/src/plugins/builtin/alerts/history.ts +1 -0
- package/src/plugins/builtin/alerts/index.tsx +6 -0
- package/src/plugins/builtin/alerts/research-builder.ts +10 -3
- package/src/plugins/builtin/alerts/research-rules.ts +15 -1
- package/src/plugins/builtin/analytics/risk-client.ts +15 -3
- package/src/plugins/builtin/analytics/risk-headless.ts +123 -18
- package/src/plugins/builtin/attention/client.ts +80 -0
- package/src/plugins/builtin/attention/evidence.ts +30 -0
- package/src/plugins/builtin/attention/headless.ts +33 -0
- package/src/plugins/builtin/attention/index.tsx +18 -0
- package/src/plugins/builtin/attention/model.ts +59 -0
- package/src/plugins/builtin/attention/pane.tsx +211 -0
- package/src/plugins/builtin/attention/trending.tsx +59 -0
- package/src/plugins/builtin/awards/alerts.ts +32 -0
- package/src/plugins/builtin/awards/client.ts +82 -0
- package/src/plugins/builtin/awards/detail.tsx +107 -0
- package/src/plugins/builtin/awards/evidence.ts +36 -0
- package/src/plugins/builtin/awards/headless.ts +55 -0
- package/src/plugins/builtin/awards/index.tsx +20 -0
- package/src/plugins/builtin/awards/model.ts +42 -0
- package/src/plugins/builtin/awards/pane.tsx +263 -0
- package/src/plugins/builtin/catalysts/client.ts +28 -0
- package/src/plugins/builtin/catalysts/detail.tsx +88 -0
- package/src/plugins/builtin/catalysts/evidence.ts +47 -0
- package/src/plugins/builtin/catalysts/headless.ts +42 -0
- package/src/plugins/builtin/catalysts/history.ts +26 -0
- package/src/plugins/builtin/catalysts/index.tsx +29 -0
- package/src/plugins/builtin/catalysts/model.ts +135 -0
- package/src/plugins/builtin/catalysts/pane.tsx +159 -0
- package/src/plugins/builtin/chart-composer/index.tsx +8 -1
- package/src/plugins/builtin/chat/attachments/desktop.tsx +610 -0
- package/src/plugins/builtin/chat/attachments/files.ts +45 -0
- package/src/plugins/builtin/chat/attachments/model.ts +164 -0
- package/src/plugins/builtin/chat/attachments/terminal.tsx +72 -0
- package/src/plugins/builtin/chat/attachments/transfer.ts +165 -0
- package/src/plugins/builtin/chat/content/channel-navigation.ts +13 -12
- package/src/plugins/builtin/chat/content/composer-runtime.ts +25 -4
- package/src/plugins/builtin/chat/content/composer.tsx +46 -4
- package/src/plugins/builtin/chat/content/footer.tsx +46 -8
- package/src/plugins/builtin/chat/content/index.tsx +263 -62
- package/src/plugins/builtin/chat/content/layout-metrics.ts +10 -2
- package/src/plugins/builtin/chat/content/open-targets.ts +17 -3
- package/src/plugins/builtin/chat/content/scroll.ts +7 -1
- package/src/plugins/builtin/chat/content/shortcuts.ts +36 -11
- package/src/plugins/builtin/chat/content/snapshot.ts +3 -0
- package/src/plugins/builtin/chat/content/transcript.tsx +17 -1
- package/src/plugins/builtin/chat/content/types.ts +7 -0
- package/src/plugins/builtin/chat/controller/attachments.ts +213 -0
- package/src/plugins/builtin/chat/controller/connections.ts +3 -1
- package/src/plugins/builtin/chat/controller/index.ts +114 -2
- package/src/plugins/builtin/chat/controller/lifecycle.ts +9 -0
- package/src/plugins/builtin/chat/controller/messages.ts +35 -2
- package/src/plugins/builtin/chat/controller/send.ts +128 -25
- package/src/plugins/builtin/chat/controller/state.ts +12 -1
- package/src/plugins/builtin/chat/controller/utils.ts +7 -5
- package/src/plugins/builtin/chat/controller/view.ts +2 -0
- package/src/plugins/builtin/chat/index.tsx +21 -0
- package/src/plugins/builtin/chat/layout.ts +9 -4
- package/src/plugins/builtin/chat/message/desktop.tsx +55 -20
- package/src/plugins/builtin/chat/message/header.tsx +30 -5
- package/src/plugins/builtin/chat/message/inline-tokens.tsx +9 -0
- package/src/plugins/builtin/chat/message/pending-send.ts +35 -0
- package/src/plugins/builtin/chat/message/profile-popover.tsx +5 -1
- package/src/plugins/builtin/chat/message/render-state.ts +12 -2
- package/src/plugins/builtin/chat/message/terminal.tsx +51 -4
- package/src/plugins/builtin/chat/message/types.ts +6 -1
- package/src/plugins/builtin/chat/pane-state.ts +59 -1
- package/src/plugins/builtin/chat/profile-popover.ts +50 -1
- package/src/plugins/builtin/chat/sidebar.tsx +8 -3
- package/src/plugins/builtin/chat/status-widget.tsx +29 -12
- package/src/plugins/builtin/chat/unread-inbox-pane.tsx +143 -0
- package/src/plugins/builtin/chat/unread-inbox.ts +91 -0
- package/src/plugins/builtin/clinical-trials/client.ts +237 -0
- package/src/plugins/builtin/clinical-trials/index.tsx +74 -0
- package/src/plugins/builtin/clinical-trials/pane.tsx +225 -0
- package/src/plugins/builtin/clinical-trials/types.ts +2 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +37 -6
- package/src/plugins/builtin/cloud/askg/executor.ts +59 -44
- package/src/plugins/builtin/cloud/askg/host.ts +8 -1
- package/src/plugins/builtin/cloud/askg/manifest.ts +29 -2
- package/src/plugins/builtin/cloud/askg/model.ts +47 -13
- package/src/plugins/builtin/cloud/askg/notes.ts +100 -0
- package/src/plugins/builtin/cloud/askg/pane.tsx +50 -14
- package/src/plugins/builtin/cloud/askg/protocol.ts +39 -1
- package/src/plugins/builtin/cloud/askg/result-budget.ts +156 -0
- package/src/plugins/builtin/cloud/askg/user-data.ts +89 -0
- package/src/plugins/builtin/cloud/auth-actions.tsx +55 -31
- package/src/plugins/builtin/cloud/plugin.tsx +4 -1
- package/src/plugins/builtin/cloud/team/pane-sections.tsx +10 -1
- package/src/plugins/builtin/cloud/team/pane.tsx +3 -2
- package/src/plugins/builtin/cloud/thesis/board-pane.tsx +2 -2
- package/src/plugins/builtin/cloud/thesis/detail.tsx +1 -1
- package/src/plugins/builtin/cloud/thesis/ticker-tab.tsx +2 -2
- package/src/plugins/builtin/cloud/trial-offer-status-widget.tsx +202 -0
- package/src/plugins/builtin/cloud/upgrade-command.ts +1 -1
- package/src/plugins/builtin/cloud/upgrade-dialog.tsx +29 -3
- package/src/plugins/builtin/cloud/upgrade-status-widget.tsx +1 -1
- package/src/plugins/builtin/cloud-tweets/table.tsx +1 -1
- package/src/plugins/builtin/comment-letters/client.ts +342 -0
- package/src/plugins/builtin/comment-letters/index.tsx +74 -0
- package/src/plugins/builtin/comment-letters/pane.tsx +295 -0
- package/src/plugins/builtin/comment-letters/types.ts +43 -0
- package/src/plugins/builtin/company-attention/app-rank.tsx +79 -0
- package/src/plugins/builtin/company-attention/client.ts +69 -0
- package/src/plugins/builtin/company-attention/evidence.ts +45 -0
- package/src/plugins/builtin/company-attention/headless.ts +47 -0
- package/src/plugins/builtin/company-attention/index.tsx +30 -0
- package/src/plugins/builtin/company-attention/model.ts +129 -0
- package/src/plugins/builtin/company-attention/pane.tsx +183 -0
- package/src/plugins/builtin/company-kpis/client.ts +92 -0
- package/src/plugins/builtin/company-kpis/headless.ts +32 -0
- package/src/plugins/builtin/company-kpis/index.tsx +26 -0
- package/src/plugins/builtin/company-kpis/model.ts +124 -0
- package/src/plugins/builtin/company-kpis/pane.tsx +226 -0
- package/src/plugins/builtin/company-kpis/related.ts +11 -0
- package/src/plugins/builtin/company-kpis/screenshot-evidence.ts +44 -0
- package/src/plugins/builtin/composite-plugins.ts +32 -0
- package/src/plugins/builtin/correlation/history.ts +4 -1
- package/src/plugins/builtin/correlation/index.tsx +139 -80
- package/src/plugins/builtin/correlation/matrix/pair-chart.tsx +48 -0
- package/src/plugins/builtin/correlation/matrix/selection.ts +77 -0
- package/src/plugins/builtin/correlation/relationship/model.ts +2 -2
- package/src/plugins/builtin/cpi/client.ts +66 -0
- package/src/plugins/builtin/cpi/headless.ts +78 -0
- package/src/plugins/builtin/cpi/index.tsx +31 -0
- package/src/plugins/builtin/cpi/model.ts +198 -0
- package/src/plugins/builtin/cpi/pane.tsx +157 -0
- package/src/plugins/builtin/credit-documents/client.ts +99 -0
- package/src/plugins/builtin/credit-documents/detail.tsx +109 -0
- package/src/plugins/builtin/credit-documents/evidence.ts +64 -0
- package/src/plugins/builtin/credit-documents/gauge.tsx +55 -0
- package/src/plugins/builtin/credit-documents/headless.ts +40 -0
- package/src/plugins/builtin/credit-documents/index.tsx +19 -0
- package/src/plugins/builtin/credit-documents/model.ts +336 -0
- package/src/plugins/builtin/credit-documents/pane.tsx +185 -0
- package/src/plugins/builtin/custom-view/view-spec.ts +14 -2
- package/src/plugins/builtin/debt-maturities/pane.tsx +1 -0
- package/src/plugins/builtin/dividend-yield/pane.tsx +1 -1
- package/src/plugins/builtin/earnings/board.tsx +3 -0
- package/src/plugins/builtin/earnings/index.tsx +2 -0
- package/src/plugins/builtin/earnings-calls/pane.tsx +7 -1
- package/src/plugins/builtin/earnings-ripple/client.ts +60 -0
- package/src/plugins/builtin/earnings-ripple/headless.ts +35 -0
- package/src/plugins/builtin/earnings-ripple/index.tsx +35 -0
- package/src/plugins/builtin/earnings-ripple/model.ts +98 -0
- package/src/plugins/builtin/earnings-ripple/pane.tsx +103 -0
- package/src/plugins/builtin/equity-screener/client.ts +1 -1
- package/src/plugins/builtin/equity-screener/criterion-editor.tsx +1 -1
- package/src/plugins/builtin/equity-screener/model.ts +74 -9
- package/src/plugins/builtin/equity-screener/pane.tsx +2 -0
- package/src/plugins/builtin/estimate-revisions/pane.tsx +3 -0
- package/src/plugins/builtin/executives/pane.tsx +3 -1
- package/src/plugins/builtin/exposure/charts.tsx +66 -0
- package/src/plugins/builtin/exposure/client.ts +53 -0
- package/src/plugins/builtin/exposure/drivers.ts +29 -0
- package/src/plugins/builtin/exposure/editor.tsx +61 -0
- package/src/plugins/builtin/exposure/evidence.ts +39 -0
- package/src/plugins/builtin/exposure/headless.ts +51 -0
- package/src/plugins/builtin/exposure/holdings.ts +56 -0
- package/src/plugins/builtin/exposure/index.tsx +13 -0
- package/src/plugins/builtin/exposure/model.ts +104 -0
- package/src/plugins/builtin/exposure/pane.tsx +247 -0
- package/src/plugins/builtin/fear-greed/pane.tsx +2 -9
- package/src/plugins/builtin/filing-events/pane.tsx +2 -1
- package/src/plugins/builtin/gpu/board.tsx +163 -0
- package/src/plugins/builtin/gpu/changes.tsx +94 -0
- package/src/plugins/builtin/gpu/client.ts +130 -0
- package/src/plugins/builtin/gpu/equities.tsx +112 -0
- package/src/plugins/builtin/gpu/headless.ts +67 -0
- package/src/plugins/builtin/gpu/history.tsx +140 -0
- package/src/plugins/builtin/gpu/index.tsx +18 -0
- package/src/plugins/builtin/gpu/ladder.tsx +127 -0
- package/src/plugins/builtin/gpu/model.ts +317 -0
- package/src/plugins/builtin/gpu/pane.tsx +63 -0
- package/src/plugins/builtin/help/index.tsx +19 -2
- package/src/plugins/builtin/holders/pane.tsx +4 -8
- package/src/plugins/builtin/insider/detail.tsx +119 -0
- package/src/plugins/builtin/insider/display.ts +221 -0
- package/src/plugins/builtin/insider/headless.ts +24 -3
- package/src/plugins/builtin/insider/index.tsx +206 -108
- package/src/plugins/builtin/insider/insider-data.ts +31 -3
- package/src/plugins/builtin/insider/model.ts +53 -4
- package/src/plugins/builtin/insider/table-model.ts +226 -0
- package/src/plugins/builtin/insider/table.tsx +79 -0
- package/src/plugins/builtin/iv-history/screen-pane.tsx +1 -1
- package/src/plugins/builtin/jobs/pane.tsx +14 -7
- package/src/plugins/builtin/macro-day/client.ts +50 -0
- package/src/plugins/builtin/macro-day/headless.ts +51 -0
- package/src/plugins/builtin/macro-day/index.tsx +21 -0
- package/src/plugins/builtin/macro-day/model.ts +137 -0
- package/src/plugins/builtin/macro-day/pane.tsx +118 -0
- package/src/plugins/builtin/macro-day/releases.ts +58 -0
- package/src/plugins/builtin/market-halts/model.ts +30 -17
- package/src/plugins/builtin/market-halts/pane.tsx +15 -21
- package/src/plugins/builtin/market-heatmap/data.ts +1 -1
- package/src/plugins/builtin/market-heatmap/index.tsx +198 -50
- package/src/plugins/builtin/market-heatmap/portfolio.ts +220 -0
- package/src/plugins/builtin/market-movers/index.tsx +1 -0
- package/src/plugins/builtin/market-movers/session-body.tsx +5 -2
- package/src/plugins/builtin/mna/distress/client.ts +326 -0
- package/src/plugins/builtin/mna/distress/detail.tsx +247 -0
- package/src/plugins/builtin/mna/distress/headless.ts +257 -0
- package/src/plugins/builtin/mna/distress/model.ts +427 -0
- package/src/plugins/builtin/mna/distress/pane.tsx +606 -0
- package/src/plugins/builtin/mna/index.tsx +15 -0
- package/src/plugins/builtin/mna/pane.tsx +42 -1
- package/src/plugins/builtin/news/index.tsx +62 -16
- package/src/plugins/builtin/news/wire/filter-articles.ts +54 -0
- package/src/plugins/builtin/news/wire/index.tsx +37 -3
- package/src/plugins/builtin/news/wire/industry-pane.tsx +29 -13
- package/src/plugins/builtin/news/wire/mutes.ts +253 -0
- package/src/plugins/builtin/news/wire/news/command-bar-search.ts +117 -0
- package/src/plugins/builtin/news/wire/news/footer.ts +4 -0
- package/src/plugins/builtin/news/wire/news/list-search.ts +34 -0
- package/src/plugins/builtin/news/wire/news/pop-out.tsx +158 -0
- package/src/plugins/builtin/news/wire/news/preset-pane.tsx +64 -19
- package/src/plugins/builtin/openfda/client.ts +300 -0
- package/src/plugins/builtin/openfda/index.tsx +71 -0
- package/src/plugins/builtin/openfda/pane.tsx +382 -0
- package/src/plugins/builtin/openfda/types.ts +76 -0
- package/src/plugins/builtin/options/footer.ts +1 -0
- package/src/plugins/builtin/options-calculator/pane.tsx +0 -1
- package/src/plugins/builtin/options-positioning/index.tsx +4 -2
- package/src/plugins/builtin/options-positioning/pane.tsx +1 -1
- package/src/plugins/builtin/pe-band/client.ts +61 -0
- package/src/plugins/builtin/pe-band/headless.ts +51 -0
- package/src/plugins/builtin/pe-band/index.tsx +20 -0
- package/src/plugins/builtin/pe-band/model.ts +267 -0
- package/src/plugins/builtin/pe-band/pane.tsx +159 -0
- package/src/plugins/builtin/perps/client.ts +66 -0
- package/src/plugins/builtin/perps/equity-row.tsx +28 -0
- package/src/plugins/builtin/perps/headless.ts +34 -0
- package/src/plugins/builtin/perps/index.tsx +14 -0
- package/src/plugins/builtin/perps/model.ts +58 -0
- package/src/plugins/builtin/perps/pane.tsx +185 -0
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +0 -1
- package/src/plugins/builtin/portfolio-list/cli/render.ts +177 -87
- package/src/plugins/builtin/portfolio-list/headless.ts +237 -0
- package/src/plugins/builtin/portfolio-list/index.tsx +2 -0
- package/src/plugins/builtin/portfolio-list/mutations.ts +17 -0
- package/src/plugins/builtin/portfolio-list/pane/data.ts +17 -0
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +88 -5
- package/src/plugins/builtin/portfolio-list/pane/remove-ticker.ts +85 -0
- package/src/plugins/builtin/portfolio-list/pane/streaming.ts +18 -12
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +6 -0
- package/src/plugins/builtin/power/client.ts +100 -0
- package/src/plugins/builtin/power/detail.tsx +82 -0
- package/src/plugins/builtin/power/evidence.ts +56 -0
- package/src/plugins/builtin/power/generation.tsx +37 -0
- package/src/plugins/builtin/power/headless.ts +43 -0
- package/src/plugins/builtin/power/index.tsx +16 -0
- package/src/plugins/builtin/power/model.ts +89 -0
- package/src/plugins/builtin/power/pane.tsx +209 -0
- package/src/plugins/builtin/power/query.ts +25 -0
- package/src/plugins/builtin/relative-rotation/pane.tsx +3 -3
- package/src/plugins/builtin/research/analyst-pane.tsx +1 -1
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +13 -4
- package/src/plugins/builtin/research/equity-diagnostic-pane.tsx +5 -3
- package/src/plugins/builtin/research-search/pane.tsx +21 -7
- package/src/plugins/builtin/revenue-breakdown/pane.tsx +1 -1
- package/src/plugins/builtin/reverse-dcf/client.ts +35 -0
- package/src/plugins/builtin/reverse-dcf/headless.ts +44 -0
- package/src/plugins/builtin/reverse-dcf/index.tsx +20 -0
- package/src/plugins/builtin/reverse-dcf/model.ts +87 -0
- package/src/plugins/builtin/reverse-dcf/pane.tsx +107 -0
- package/src/plugins/builtin/risk-factors/pane.tsx +2 -1
- package/src/plugins/builtin/scanner/denied.tsx +4 -2
- package/src/plugins/builtin/scanner/feed.ts +1 -0
- package/src/plugins/builtin/scanner/flow-pane.tsx +3 -2
- package/src/plugins/builtin/scanner/hilo-pane.tsx +1 -1
- package/src/plugins/builtin/seasonality/client.ts +4 -1
- package/src/plugins/builtin/sec/command-bar-search.ts +217 -0
- package/src/plugins/builtin/sec/forms.ts +54 -0
- package/src/plugins/builtin/sec/headless.ts +31 -5
- package/src/plugins/builtin/sec/index.tsx +67 -11
- package/src/plugins/builtin/sec/model.ts +35 -5
- package/src/plugins/builtin/sectors/headless.ts +1 -0
- package/src/plugins/builtin/sectors/index.tsx +72 -26
- package/src/plugins/builtin/shared/cloud-upgrade.ts +143 -39
- package/src/plugins/builtin/shared/pro-feature-wall.tsx +8 -4
- package/src/plugins/builtin/shared/research-cells.tsx +107 -0
- package/src/plugins/builtin/shared/series-list-detail.tsx +5 -1
- package/src/plugins/builtin/shared/wall-teaser-catalog.ts +80 -0
- package/src/plugins/builtin/shared/wall-teaser.tsx +192 -0
- package/src/plugins/builtin/shared/wall-view-lifecycle.ts +43 -0
- package/src/plugins/builtin/short-interest/index.tsx +31 -0
- package/src/plugins/builtin/short-interest/watch-client.ts +70 -0
- package/src/plugins/builtin/short-interest/watch-headless.ts +49 -0
- package/src/plugins/builtin/short-interest/watch-model.ts +185 -0
- package/src/plugins/builtin/short-interest/watch-pane.tsx +169 -0
- package/src/plugins/builtin/short-volume/pane.tsx +1 -1
- package/src/plugins/builtin/social-mentions/pane.tsx +1 -1
- package/src/plugins/builtin/supply-chain/client.ts +104 -0
- package/src/plugins/builtin/supply-chain/disclosure-quote.tsx +17 -0
- package/src/plugins/builtin/supply-chain/evidence.ts +88 -0
- package/src/plugins/builtin/supply-chain/flow-layout.ts +133 -0
- package/src/plugins/builtin/supply-chain/flow.tsx +323 -0
- package/src/plugins/builtin/supply-chain/graph-client.ts +83 -0
- package/src/plugins/builtin/supply-chain/graph-evidence.ts +25 -0
- package/src/plugins/builtin/supply-chain/graph-model.ts +45 -0
- package/src/plugins/builtin/supply-chain/graph-pane.tsx +218 -0
- package/src/plugins/builtin/supply-chain/graph.tsx +163 -0
- package/src/plugins/builtin/supply-chain/headless.ts +105 -0
- package/src/plugins/builtin/supply-chain/index.tsx +17 -0
- package/src/plugins/builtin/supply-chain/model.ts +145 -0
- package/src/plugins/builtin/supply-chain/pane.tsx +276 -0
- package/src/plugins/builtin/supply-chain/row-evidence.tsx +96 -0
- package/src/plugins/builtin/supply-chain/trust.ts +34 -0
- package/src/plugins/builtin/themes/client.ts +39 -0
- package/src/plugins/builtin/themes/headless.ts +38 -0
- package/src/plugins/builtin/themes/model.ts +92 -0
- package/src/plugins/builtin/themes/pane.tsx +125 -0
- package/src/plugins/builtin/thirteenf/pane.tsx +6 -15
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +5 -6
- package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +201 -0
- package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +327 -0
- package/src/plugins/builtin/ticker-detail/financials/period-end-history.ts +5 -2
- package/src/plugins/builtin/ticker-detail/financials/ratios.ts +18 -2
- package/src/plugins/builtin/ticker-detail/financials/tab.tsx +2 -1
- package/src/plugins/builtin/ticker-detail/headless.ts +7 -2
- package/src/plugins/builtin/ticker-detail/index.tsx +22 -0
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +53 -30
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +2 -0
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +111 -46
- package/src/plugins/builtin/ticker-detail/pane.tsx +50 -6
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +20 -41
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +3 -0
- package/src/plugins/builtin/time-sales/pane.tsx +1 -1
- package/src/plugins/builtin/world-indices/indices.ts +1 -0
- package/src/plugins/catalog-browser.ts +38 -0
- package/src/plugins/catalog-manifest.ts +3 -0
- package/src/plugins/catalog-ui.ts +6 -0
- package/src/plugins/current-target.ts +0 -9
- package/src/public/__snapshots__/public-api.test.ts.snap +1 -0
- package/src/renderers/browser/cloud-transport.ts +66 -1
- package/src/renderers/browser/main.tsx +2 -0
- package/src/renderers/dom/data-table/row.tsx +2 -0
- package/src/renderers/dom/desktop/controls.tsx +38 -25
- package/src/renderers/dom/desktop/icons.tsx +8 -0
- package/src/renderers/dom/host/chart-surface.tsx +36 -2
- package/src/renderers/dom/host/focus-scope.ts +11 -1
- package/src/renderers/dom/styles.css +28 -0
- package/src/renderers/electrobun/view/backend-rpc.ts +3 -2
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +1 -1
- package/src/renderers/electrobun/view/http-fetch.ts +2 -0
- package/src/renderers/electrobun/view/main.tsx +3 -1
- package/src/renderers/electrobun/view/rpc-timeout.ts +59 -0
- package/src/renderers/opentui/start.tsx +3 -0
- package/src/shares/api.ts +3 -1
- package/src/sources/sec-edgar/identity.ts +36 -0
- package/src/sources/sec-edgar.ts +1 -34
- package/src/state/app/context/index.tsx +8 -0
- package/src/sync/core-contributors.ts +2 -0
- package/src/telemetry/attention-counts.ts +164 -0
- package/src/telemetry/live-config.ts +7 -0
- package/src/test-support/rpc-loopback.ts +7 -3
- package/src/test-support/shell-pane-keys.tsx +34 -0
- package/src/tickers/instrument-kind.ts +12 -6
- package/src/tickers/search/asset-classes.ts +91 -0
- package/src/tickers/search/index.ts +18 -4
- package/src/tickers/search/ranking.ts +22 -3
- package/src/types/config.ts +23 -1
- package/src/types/headless.ts +17 -0
- package/src/ui/host.tsx +6 -0
- package/src/utils/double-escape-close.ts +20 -0
- package/src/utils/html-entities.ts +15 -0
- package/src/utils/http-proxy-response.ts +44 -7
- package/src/utils/plugin-proxy-hosts.json +3 -0
- package/src/utils/sec.ts +19 -1
- package/src/utils/text-wrap.ts +13 -8
package/src/api-client/data.ts
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
|
+
import type { AttentionPayload, AttentionWindow } from "./attention";
|
|
2
|
+
import type { HiringBoard, HiringPayload } from "./hiring";
|
|
3
|
+
import type { AppAttentionFilter, AppAttentionPayload, AppRankPayload } from "./app-attention";
|
|
4
|
+
import type { CatalystResponse, CatalystDetail, CatalystFilters, CatalystStatus, CatalystChanges } from "./catalysts";
|
|
5
|
+
import type { KpisPayload, GuidancePayload, KpiQueryOptions } from "./company-kpis";
|
|
6
|
+
import { companyDisclosurePath } from "./company-kpis";
|
|
7
|
+
import type { PowerBoard, PowerDetail, PowerFilter, PowerHistory } from "./power";
|
|
8
|
+
import type { PerpBoardPayload, PerpHistoryPayload, PerpRankingsPayload, PerpBoardQuery, PerpHistoryQuery, PerpMarketPayload } from "./perps";
|
|
9
|
+
import type { ExposureRequest, ExposurePayload, ExposureScenario } from "./exposure";
|
|
10
|
+
import type { SupplyChainPayload, SupplyOptions } from "./supply-chain";
|
|
11
|
+
import { supplyGraphQuery, type GraphOptions, type GraphPayload } from "./supply-chain-graph";
|
|
12
|
+
import type { AwardDetailPayload, AwardFilter, AwardsPayload } from "./awards";
|
|
1
13
|
import type { EarningsEvent } from "../types/data-provider";
|
|
2
14
|
import type { MarketDividendsPayload, MarketHeatmapResult, MarketHeatmapUniverseId, MarketMoversPayload } from "./market-discovery";
|
|
3
15
|
import type { DebtMaturitiesPayload } from "./debt-maturities";
|
|
4
16
|
import type { RevenueBreakdownPayload, RevenueBreakdownView } from "./revenue-breakdown";
|
|
5
17
|
import type { MnaDealPayload, MnaDealsParams, MnaDealsPayload } from "./mna";
|
|
18
|
+
import {
|
|
19
|
+
distressQuery,
|
|
20
|
+
type DistressDesignationsParams,
|
|
21
|
+
type DistressFilingsParams,
|
|
22
|
+
type GoingConcernParams,
|
|
23
|
+
type InsolvencyNoticesParams,
|
|
24
|
+
} from "./distress";
|
|
6
25
|
import type { IpoCalendarParams, IpoCalendarPayload } from "./ipo";
|
|
7
26
|
import type { CryptoMarketsPayload } from "./crypto-markets";
|
|
8
27
|
import type { CentralBankRatesPayload } from "./central-bank-rates";
|
|
@@ -15,6 +34,8 @@ import type { SocialMentionDayPosts, SocialMentionsPayload, SocialMentionsRange
|
|
|
15
34
|
import type { FuturesCurveAsOfPayload, FuturesCurvePayload } from "./futures-curve";
|
|
16
35
|
import type { CotBoardPayload, CotContractPayload, CotFamily, CotClass } from "./cot";
|
|
17
36
|
import type { DoeBoardPayload } from "./doe";
|
|
37
|
+
import type { GpuBoardPayload, GpuEventsPayload, GpuHistoryPayload, GpuHistoryQuery } from "./gpu";
|
|
38
|
+
import type { CpiBoardPayload } from "./cpi";
|
|
18
39
|
import type { TapeSnapshot } from "./tape";
|
|
19
40
|
import type { ExchangeRateSnapshot } from "../types/exchange-rate";
|
|
20
41
|
import type { RatePathPayload } from "./rates";
|
|
@@ -146,10 +167,12 @@ export class CloudDataApi {
|
|
|
146
167
|
path: string,
|
|
147
168
|
targets: CloudMarketBatchTarget[],
|
|
148
169
|
mode: "cache-first" | "refresh",
|
|
170
|
+
signal?: AbortSignal,
|
|
149
171
|
): Promise<CloudMarketResponse<CloudMarketBatchPayload<T>>> {
|
|
150
172
|
return this.request<CloudMarketResponse<CloudMarketBatchPayload<T>>>(path, {
|
|
151
173
|
method: "POST",
|
|
152
174
|
body: JSON.stringify({ targets, mode }),
|
|
175
|
+
...(signal ? { signal } : {}),
|
|
153
176
|
});
|
|
154
177
|
}
|
|
155
178
|
|
|
@@ -158,6 +181,14 @@ export class CloudDataApi {
|
|
|
158
181
|
return this.request<T>(`/cloud/equity-screener/${path}`, init);
|
|
159
182
|
}
|
|
160
183
|
|
|
184
|
+
getCloudThemes() {
|
|
185
|
+
return this.request<import("./themes").ThemesPayload>("/cloud/themes");
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
getCloudThemeMembers(id: string) {
|
|
189
|
+
return this.request<import("./themes").ThemeMembersPayload>(`/cloud/themes/${encodeURIComponent(id)}`);
|
|
190
|
+
}
|
|
191
|
+
|
|
161
192
|
/** Stored implied volatility (HIVG, VCA, OVDV dates); one prefix-scoped method, like EQS. */
|
|
162
193
|
impliedVolatility<T>(path: string, init?: RequestInit) {
|
|
163
194
|
return this.request<T>(`/cloud/iv/${path}`, init);
|
|
@@ -204,8 +235,9 @@ export class CloudDataApi {
|
|
|
204
235
|
async getCloudQuotesBatch(
|
|
205
236
|
targets: CloudMarketBatchTarget[],
|
|
206
237
|
mode: "cache-first" | "refresh" = "cache-first",
|
|
238
|
+
options: { signal?: AbortSignal } = {},
|
|
207
239
|
): Promise<CloudMarketResponse<CloudMarketBatchPayload<CloudQuotePayload>>> {
|
|
208
|
-
return this.postMarketBatch("/market/quotes/batch", targets, mode);
|
|
240
|
+
return this.postMarketBatch("/market/quotes/batch", targets, mode, options.signal);
|
|
209
241
|
}
|
|
210
242
|
|
|
211
243
|
async getCloudWorldVenues(): Promise<
|
|
@@ -324,9 +356,11 @@ export class CloudDataApi {
|
|
|
324
356
|
symbol: string,
|
|
325
357
|
exchange: string,
|
|
326
358
|
params: CloudHistoryParams = {},
|
|
359
|
+
options: { signal?: AbortSignal } = {},
|
|
327
360
|
): Promise<CloudMarketResponse<CloudPricePointPayload[]>> {
|
|
328
361
|
return this.request<CloudMarketResponse<CloudPricePointPayload[]>>(
|
|
329
362
|
cloudHistoryPath(symbol, exchange, params),
|
|
363
|
+
options.signal ? { signal: options.signal } : undefined,
|
|
330
364
|
);
|
|
331
365
|
}
|
|
332
366
|
|
|
@@ -368,9 +402,11 @@ export class CloudDataApi {
|
|
|
368
402
|
async getCloudFredSeries(
|
|
369
403
|
seriesId: string,
|
|
370
404
|
params: CloudFredSeriesParams = {},
|
|
405
|
+
options: { signal?: AbortSignal } = {},
|
|
371
406
|
): Promise<CloudFredSeriesPayload> {
|
|
372
407
|
return this.request<CloudFredSeriesPayload>(
|
|
373
408
|
cloudFredSeriesPath(seriesId, params),
|
|
409
|
+
options.signal ? { signal: options.signal } : undefined,
|
|
374
410
|
);
|
|
375
411
|
}
|
|
376
412
|
|
|
@@ -386,10 +422,140 @@ export class CloudDataApi {
|
|
|
386
422
|
return this.request<CotContractPayload>(`/cloud/cot/contracts/${encodeURIComponent(code)}?${new URLSearchParams({ report })}`);
|
|
387
423
|
}
|
|
388
424
|
|
|
425
|
+
/** Credit-document paths stay with their pane; keep the shared client small. */
|
|
426
|
+
creditDocuments<T>(path: string): Promise<T> {
|
|
427
|
+
return this.request<T>(`/cloud/credit-documents/${path}`);
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
async getCloudHiring(symbol?: string, query: { limit?: number; offset?: number } = {}, signal?: AbortSignal): Promise<HiringBoard | HiringPayload> {
|
|
431
|
+
const params = new URLSearchParams({ limit: String(query.limit ?? 100), offset: String(query.offset ?? 0) });
|
|
432
|
+
return this.request<HiringBoard | HiringPayload>(symbol ? `/cloud/hiring/${encodeURIComponent(symbol)}` : `/cloud/hiring?${params}`, { signal });
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
async getCloudAppRankHistory(store: "app-store" | "google-play", appId: string, query: AppAttentionFilter = {}, signal?: AbortSignal): Promise<AppRankPayload> {
|
|
436
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
437
|
+
return this.request<AppRankPayload>(`/cloud/app-attention/app/${store}/${encodeURIComponent(appId)}?${params}`, { signal });
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
async getCloudAppAttention(query: AppAttentionFilter = {}, signal?: AbortSignal): Promise<AppAttentionPayload> {
|
|
441
|
+
const { symbol, ...filters } = query;
|
|
442
|
+
const params = new URLSearchParams(Object.entries(filters).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
443
|
+
return this.request<AppAttentionPayload>(`/cloud/app-attention/${symbol ? encodeURIComponent(symbol) : "board"}?${params}`, { signal });
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
async getCloudCatalysts(query: CatalystFilters = {}, signal?: AbortSignal): Promise<CatalystResponse> {
|
|
447
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
448
|
+
const route = query.litigation && query.symbol ? `/cloud/catalysts/litigation/${encodeURIComponent(query.symbol)}` : "/cloud/catalysts";
|
|
449
|
+
return this.request<CatalystResponse>(`${route}?${params}`, { signal });
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
async getCloudCatalystChanges(query: { since: string; cursor?: string; limit?: number }, signal?: AbortSignal): Promise<CatalystChanges> {
|
|
453
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
454
|
+
return this.request<CatalystChanges>(`/cloud/catalysts/changes?${params}`, { signal });
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
async getCloudCatalystEvent(id: string, signal?: AbortSignal, query: { offset?: number; limit?: number } = {}): Promise<CatalystDetail> {
|
|
458
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
459
|
+
return this.request<CatalystDetail>(`/cloud/catalysts/events/${encodeURIComponent(id)}?${params}`, { signal });
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
async getCloudCatalystStatus(): Promise<CatalystStatus> {
|
|
463
|
+
return this.request<CatalystStatus>("/cloud/catalysts/status");
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
async getCloudCompanyKpis(symbol: string, options: KpiQueryOptions = {}): Promise<KpisPayload> {
|
|
467
|
+
return this.request<KpisPayload>(companyDisclosurePath("kpis", symbol, options));
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
async getCloudCompanyGuidance(symbol: string, options: KpiQueryOptions = {}): Promise<GuidancePayload> {
|
|
471
|
+
return this.request<GuidancePayload>(companyDisclosurePath("guidance", symbol, options));
|
|
472
|
+
}
|
|
473
|
+
async getCloudPerpsBoard(query: PerpBoardQuery = {}): Promise<PerpBoardPayload> {
|
|
474
|
+
return this.request(`/cloud/perps/board?${new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]))}`);
|
|
475
|
+
}
|
|
476
|
+
async getCloudPerpsHistory(query: PerpHistoryQuery): Promise<PerpHistoryPayload> {
|
|
477
|
+
return this.request(`/cloud/perps/history?${new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]))}`);
|
|
478
|
+
}
|
|
479
|
+
async getCloudPerpsRankings(): Promise<PerpRankingsPayload> { return this.request("/cloud/perps/rankings"); }
|
|
480
|
+
async getCloudPerpsCompare(baseAsset: string): Promise<PerpBoardPayload> { return this.request(`/cloud/perps/compare?${new URLSearchParams({ baseAsset })}`); }
|
|
481
|
+
async getCloudPerpsEquity(symbol: string): Promise<PerpBoardPayload> { return this.request(`/cloud/perps/equity/${encodeURIComponent(symbol)}`); }
|
|
482
|
+
async getCloudPerpsMarket(marketId: string): Promise<PerpMarketPayload> { return this.request(`/cloud/perps/market?${new URLSearchParams({ marketId })}`); }
|
|
483
|
+
|
|
484
|
+
async analyzeCloudExposure(request: ExposureRequest): Promise<ExposurePayload> {
|
|
485
|
+
return this.request<ExposurePayload>("/cloud/exposure/analyze", { method: "POST", body: JSON.stringify(request) });
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
async getCloudExposureScenarios(): Promise<{ scenarios: ExposureScenario[] }> {
|
|
489
|
+
return this.request<{ scenarios: ExposureScenario[] }>("/cloud/exposure/scenarios");
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
async getCloudSupplyChain(symbol: string, options: SupplyOptions = {}): Promise<SupplyChainPayload> {
|
|
493
|
+
const query = new URLSearchParams();
|
|
494
|
+
if (options.tiers?.length) query.set("tiers", options.tiers.join(","));
|
|
495
|
+
if (options.includeLeads) query.set("includeLeads", "1");
|
|
496
|
+
return this.request<SupplyChainPayload>(`/cloud/supply-chain/${encodeURIComponent(symbol)}${query.size ? `?${query}` : ""}`);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
getCloudAwards(query: AwardFilter = {}, signal?: AbortSignal): Promise<AwardsPayload> {
|
|
500
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value != null).map(([key, value]) => [key, `${value}`]));
|
|
501
|
+
return this.request<AwardsPayload>(`/cloud/awards?${params}`, { signal });
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
getCloudAward(id: string, signal?: AbortSignal, revisionsCursor?: string): Promise<AwardDetailPayload> {
|
|
505
|
+
const query = revisionsCursor ? `?${new URLSearchParams({ revisionsCursor })}` : "";
|
|
506
|
+
return this.request<AwardDetailPayload>(`/cloud/awards/detail/${encodeURIComponent(id)}${query}`, { signal });
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
async getCloudSupplyGraph(symbol: string, options: Partial<GraphOptions> = {}): Promise<GraphPayload> {
|
|
510
|
+
return this.request<GraphPayload>(`/cloud/supply-chain/${encodeURIComponent(symbol)}/graph?${supplyGraphQuery(options)}`);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
async getCloudSupplyPaths(from: string, to: string, options: Partial<GraphOptions> = {}): Promise<GraphPayload> {
|
|
514
|
+
return this.request<GraphPayload>(`/cloud/supply-chain/paths?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)}&${supplyGraphQuery(options)}`);
|
|
515
|
+
}
|
|
516
|
+
|
|
389
517
|
async getCloudDoeBoard(): Promise<DoeBoardPayload> {
|
|
390
518
|
return this.request<DoeBoardPayload>("/cloud/doe/board");
|
|
391
519
|
}
|
|
392
520
|
|
|
521
|
+
async getCloudAttention(window: AttentionWindow = "now", symbol?: string): Promise<AttentionPayload> {
|
|
522
|
+
const path = symbol ? `/cloud/attention/${encodeURIComponent(symbol)}` : "/cloud/attention";
|
|
523
|
+
return this.request<AttentionPayload>(`${path}?window=${window}`);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
async getCloudPowerBoard(query: PowerFilter = {}, signal?: AbortSignal): Promise<PowerBoard> {
|
|
527
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
528
|
+
return this.request<PowerBoard>(`/cloud/power/board?${params}`, { signal });
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
async getCloudPowerHistory(query: PowerFilter = {}): Promise<PowerHistory> {
|
|
532
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
533
|
+
return this.request<PowerHistory>(`/cloud/power/history?${params}`);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
async getCloudPowerProject(id: string, query: Pick<PowerFilter, "offset" | "limit"> = {}, signal?: AbortSignal): Promise<PowerDetail> {
|
|
537
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
538
|
+
return this.request<PowerDetail>(`/cloud/power/projects/${encodeURIComponent(id)}?${params}`, { signal });
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
async getCloudGpuBoard(): Promise<GpuBoardPayload> {
|
|
542
|
+
return this.request<GpuBoardPayload>("/cloud/gpu/board");
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
async getCloudGpuHistory(query: GpuHistoryQuery = {}): Promise<GpuHistoryPayload> {
|
|
546
|
+
const params = new URLSearchParams(Object.entries(query).filter(([, value]) => value !== undefined).map(([key, value]) => [key, String(value)]));
|
|
547
|
+
return this.request<GpuHistoryPayload>(`/cloud/gpu/history?${params}`);
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
async getCloudGpuEvents(gpuModel?: string): Promise<GpuEventsPayload> {
|
|
551
|
+
const params = new URLSearchParams({ limit: "1000", ...(gpuModel ? { gpuModel } : {}) });
|
|
552
|
+
return this.request<GpuEventsPayload>(`/cloud/gpu/events?${params}`);
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
async getCloudCpiBoard(): Promise<CpiBoardPayload> {
|
|
556
|
+
return this.request<CpiBoardPayload>("/cloud/cpi/board");
|
|
557
|
+
}
|
|
558
|
+
|
|
393
559
|
async getCloudTape(symbol: string, exchange: string, signal?: AbortSignal): Promise<TapeSnapshot> {
|
|
394
560
|
return this.request<TapeSnapshot>(`/cloud/tape/${encodeURIComponent(symbol)}?exchange=${encodeURIComponent(exchange)}`, { signal: signal ?? AbortSignal.timeout(30_000) });
|
|
395
561
|
}
|
|
@@ -454,6 +620,24 @@ export class CloudDataApi {
|
|
|
454
620
|
return this.request<MnaDealPayload>(`/cloud/mna/deals/${encodeURIComponent(id)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
|
|
455
621
|
}
|
|
456
622
|
|
|
623
|
+
// Public records about companies in difficulty. The answers are unchecked
|
|
624
|
+
// JSON: the distress tab's parsers validate them before anything is drawn.
|
|
625
|
+
async getPublicDistressFilings(params: DistressFilingsParams, options?: { signal?: AbortSignal }): Promise<unknown> {
|
|
626
|
+
return this.request<unknown>(`/public/events${distressQuery(params)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
async getPublicGoingConcern(params: GoingConcernParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
|
|
630
|
+
return this.request<unknown>(`/public/going-concern${distressQuery(params)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
async getPublicDistressDesignations(params: DistressDesignationsParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
|
|
634
|
+
return this.request<unknown>(`/public/distress-designations${distressQuery(params)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
async getPublicInsolvencyNotices(params: InsolvencyNoticesParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
|
|
638
|
+
return this.request<unknown>(`/public/insolvency-notices${distressQuery(params)}`, { signal: options?.signal ?? AbortSignal.timeout(30_000) });
|
|
639
|
+
}
|
|
640
|
+
|
|
457
641
|
async getCloudIpoCalendar(params: IpoCalendarParams = {}, options?: { signal?: AbortSignal }): Promise<IpoCalendarPayload> {
|
|
458
642
|
const query = new URLSearchParams();
|
|
459
643
|
for (const [key, value] of Object.entries(params)) {
|
|
@@ -620,8 +804,8 @@ export class CloudDataApi {
|
|
|
620
804
|
}
|
|
621
805
|
|
|
622
806
|
/**
|
|
623
|
-
* Cross-document full-text search
|
|
624
|
-
*
|
|
807
|
+
* Cross-document full-text search, open to every signed-in account; signed
|
|
808
|
+
* out it answers 401. Only alerts on a saved search need Pro.
|
|
625
809
|
*/
|
|
626
810
|
async searchCloudDocuments(
|
|
627
811
|
params: CloudSearchParams,
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public records about companies in difficulty: US 8-K filings under the
|
|
3
|
+
* bankruptcy, obligation and listing items, SEC going-concern disclosures,
|
|
4
|
+
* exchange listing designations and company insolvency notices. Every route
|
|
5
|
+
* is anonymous; field names follow the server, which serves the last three in
|
|
6
|
+
* snake case.
|
|
7
|
+
*/
|
|
8
|
+
import type { CloudFilingEventPayload } from "./types";
|
|
9
|
+
|
|
10
|
+
/** `distress` is Items 1.03 and 2.04; `listing` is Item 3.01. */
|
|
11
|
+
export type DistressFilingKind = "distress" | "listing";
|
|
12
|
+
|
|
13
|
+
export interface DistressFilingsParams {
|
|
14
|
+
kind: DistressFilingKind;
|
|
15
|
+
/** 1 to 200; the route has no offset, so this is the whole list. */
|
|
16
|
+
limit?: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface DistressFilingsPayload {
|
|
20
|
+
events: CloudFilingEventPayload[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type GoingConcernVerdict = "doubt_raised" | "doubt_alleviated" | "policy_only" | "unclear";
|
|
24
|
+
|
|
25
|
+
export interface GoingConcernParams {
|
|
26
|
+
verdict?: GoingConcernVerdict;
|
|
27
|
+
limit?: number;
|
|
28
|
+
offset?: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface GoingConcernDisclosure {
|
|
32
|
+
id: string;
|
|
33
|
+
cik: string;
|
|
34
|
+
/** Venue-qualified trading symbol (`BMRA:NASDAQ`), null for a filer without one. */
|
|
35
|
+
ticker: string | null;
|
|
36
|
+
accession: string;
|
|
37
|
+
form: string;
|
|
38
|
+
period_end: string | null;
|
|
39
|
+
filed_at: string;
|
|
40
|
+
fact_date: string | null;
|
|
41
|
+
tag: string;
|
|
42
|
+
verdict: GoingConcernVerdict;
|
|
43
|
+
/** Whether the filing frames its assessment over one year; null when it does not say. */
|
|
44
|
+
within_one_year: boolean | null;
|
|
45
|
+
source_within_one_year: boolean | null;
|
|
46
|
+
summary: string;
|
|
47
|
+
quote: string;
|
|
48
|
+
text: string;
|
|
49
|
+
text_truncated: boolean;
|
|
50
|
+
dataset_month: string;
|
|
51
|
+
company: { ticker: string; cik: string | null; name: string; shortName: string };
|
|
52
|
+
filing_url: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface GoingConcernPayload {
|
|
56
|
+
disclosures: GoingConcernDisclosure[];
|
|
57
|
+
hasMore: boolean;
|
|
58
|
+
limit: number;
|
|
59
|
+
offset: number;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export type DesignationDateBasis = "designation" | "effective" | "first_observed";
|
|
63
|
+
|
|
64
|
+
export interface DistressDesignationsParams {
|
|
65
|
+
kind?: string;
|
|
66
|
+
exchange?: string;
|
|
67
|
+
limit?: number;
|
|
68
|
+
offset?: number;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface DistressDesignation {
|
|
72
|
+
id: string;
|
|
73
|
+
source: string;
|
|
74
|
+
region: string;
|
|
75
|
+
exchange: string;
|
|
76
|
+
/** Canonical listing key, e.g. `2867:TWSE`. */
|
|
77
|
+
symbol: string | null;
|
|
78
|
+
local_code: string;
|
|
79
|
+
entity_name: string;
|
|
80
|
+
entity_name_en: string | null;
|
|
81
|
+
market_segment: string | null;
|
|
82
|
+
/** `delisted`, `changed_trading_method` or `suspended`. */
|
|
83
|
+
kind: string;
|
|
84
|
+
designated_at: string | null;
|
|
85
|
+
effective_at: string | null;
|
|
86
|
+
first_seen_at: string;
|
|
87
|
+
last_seen_at: string;
|
|
88
|
+
ended_at: string | null;
|
|
89
|
+
remarks: string;
|
|
90
|
+
source_url: string;
|
|
91
|
+
notice_url: string | null;
|
|
92
|
+
date_basis: DesignationDateBasis;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The licence terms a source's rows are published under, reproduced with them. */
|
|
96
|
+
export interface DistressAttribution {
|
|
97
|
+
source: string;
|
|
98
|
+
organization: string;
|
|
99
|
+
dataset: string | null;
|
|
100
|
+
version: string | null;
|
|
101
|
+
year: number | null;
|
|
102
|
+
datasetUrls: string[];
|
|
103
|
+
licence: string;
|
|
104
|
+
licenceUrl: string;
|
|
105
|
+
notice: string;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface DistressDesignationsPayload {
|
|
109
|
+
designations: DistressDesignation[];
|
|
110
|
+
hasMore: boolean;
|
|
111
|
+
limit: number;
|
|
112
|
+
offset: number;
|
|
113
|
+
attributions: DistressAttribution[];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface InsolvencyNoticesParams {
|
|
117
|
+
country?: string;
|
|
118
|
+
kind?: string;
|
|
119
|
+
/** Company name prefix, two characters or more. */
|
|
120
|
+
name_prefix?: string;
|
|
121
|
+
limit?: number;
|
|
122
|
+
offset?: number;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface InsolvencyNotice {
|
|
126
|
+
source: string;
|
|
127
|
+
country: string;
|
|
128
|
+
/** SIREN in France, the Companies House number in the UK. */
|
|
129
|
+
registry_id: string;
|
|
130
|
+
entity_name: string;
|
|
131
|
+
symbol: string | null;
|
|
132
|
+
kind: string;
|
|
133
|
+
/** The official judgment label (France) or Gazette notice code (UK). */
|
|
134
|
+
raw_code: string;
|
|
135
|
+
/** Judgment or procedure date, when the notice states one. */
|
|
136
|
+
notice_date: string | null;
|
|
137
|
+
published_date: string;
|
|
138
|
+
court: string;
|
|
139
|
+
notice_id: string;
|
|
140
|
+
notice_url: string;
|
|
141
|
+
/** `annonce`, `rectificatif` or `annulation`. */
|
|
142
|
+
notice_type: string;
|
|
143
|
+
original_notice_id: string | null;
|
|
144
|
+
/** `active`, `superseded` or `cancelled`. */
|
|
145
|
+
status: string;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export interface InsolvencyNoticesPayload {
|
|
149
|
+
notices: InsolvencyNotice[];
|
|
150
|
+
hasMore: boolean;
|
|
151
|
+
limit: number;
|
|
152
|
+
offset: number;
|
|
153
|
+
attributions: DistressAttribution[];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** `?a=1&b=2` from the defined, non-empty values; empty when there are none. */
|
|
157
|
+
export function distressQuery(params: object): string {
|
|
158
|
+
const query = new URLSearchParams();
|
|
159
|
+
for (const [key, value] of Object.entries(params)) {
|
|
160
|
+
if (value !== undefined && value !== null && value !== "") query.set(key, String(value));
|
|
161
|
+
}
|
|
162
|
+
const text = query.toString();
|
|
163
|
+
return text ? `?${text}` : "";
|
|
164
|
+
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
/** Cited company disclosures; Pro, omitted by older servers. */
|
|
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;
|
|
1
3
|
export const NUMERIC_FIELDS = [
|
|
4
|
+
...KPI_FIELDS,
|
|
2
5
|
"price",
|
|
3
6
|
"changePercent",
|
|
4
7
|
"volume",
|
|
@@ -26,6 +29,8 @@ export const NUMERIC_FIELDS = [
|
|
|
26
29
|
"xPostsVsMedian",
|
|
27
30
|
"wikiViewsPerDay",
|
|
28
31
|
"wikiViewsVsMedian",
|
|
32
|
+
"attentionResearchUnits",
|
|
33
|
+
"attentionZScore",
|
|
29
34
|
"return1WPercent",
|
|
30
35
|
"return1MPercent",
|
|
31
36
|
"return3MPercent",
|
|
@@ -40,9 +45,14 @@ export const NUMERIC_FIELDS = [
|
|
|
40
45
|
"analystUpsidePercent",
|
|
41
46
|
"ivRank",
|
|
42
47
|
"ivToHv",
|
|
48
|
+
"hiringOpenRoles", "hiringNetAddsWeek", "hiringRemotePercent", "hiringZScore",
|
|
49
|
+
"appAttentionScore", "appRankVelocity7d", "appRatingDrift7d", "appRatingCountGrowth7d",
|
|
43
50
|
] as const;
|
|
51
|
+
/** Hiring and app attention are optional when connecting to an older server. */
|
|
52
|
+
export const HIRING_APP_FIELDS = ["hiringOpenRoles", "hiringNetAddsWeek", "hiringRemotePercent", "hiringZScore", "appAttentionScore", "appRankVelocity7d", "appRatingDrift7d", "appRatingCountGrowth7d"] as const;
|
|
44
53
|
/** Social attention; a server from before them omits these metrics. */
|
|
45
54
|
export const SOCIAL_FIELDS = ["xPostsPerDay", "xPostsVsMedian", "wikiViewsPerDay", "wikiViewsVsMedian"] as const;
|
|
55
|
+
export const ATTENTION_FIELDS = ["attentionResearchUnits", "attentionZScore"] as const;
|
|
46
56
|
/** Returns, valuation, estimates and options; a server from before them omits these metrics. */
|
|
47
57
|
export const RESEARCH_FIELDS = [
|
|
48
58
|
"return1WPercent", "return1MPercent", "return3MPercent", "returnYtdPercent", "return1YPercent", "fromHigh52WPercent",
|
|
@@ -147,6 +157,7 @@ export interface SavedScreen {
|
|
|
147
157
|
updatedAt: string;
|
|
148
158
|
}
|
|
149
159
|
export interface ScreenFieldDefinition {
|
|
160
|
+
access?: "pro";
|
|
150
161
|
id: ScreenField;
|
|
151
162
|
label: string;
|
|
152
163
|
kind: "number" | "category";
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
type EvidenceTier = "structured" | "primary" | "secondary" | "imported";
|
|
2
|
+
|
|
3
|
+
export type ExposureRange = { low: number; high: number }
|
|
4
|
+
export type ExposureBasis =
|
|
5
|
+
| "revenue"
|
|
6
|
+
| "cost"
|
|
7
|
+
| "purchases"
|
|
8
|
+
| "receivables"
|
|
9
|
+
| "operating_income"
|
|
10
|
+
| "interest_expense"
|
|
11
|
+
| "debt"
|
|
12
|
+
type ExposureShockKind =
|
|
13
|
+
| "country"
|
|
14
|
+
| "commodity"
|
|
15
|
+
| "rate"
|
|
16
|
+
| "fx"
|
|
17
|
+
| "tariff"
|
|
18
|
+
| "supplier"
|
|
19
|
+
| "customer"
|
|
20
|
+
/** Percentages are percentage points. Weights alone are fractions of NAV. */
|
|
21
|
+
interface ExposureShock {
|
|
22
|
+
id: string
|
|
23
|
+
kind: ExposureShockKind
|
|
24
|
+
/** ISO country/currency code, commodity, or exact entity id/ticker/name. */
|
|
25
|
+
target: string
|
|
26
|
+
changePct?: number
|
|
27
|
+
changeBps?: number
|
|
28
|
+
/** Optional product restriction, e.g. a country export ban on semiconductors. */
|
|
29
|
+
products?: string[]
|
|
30
|
+
/** An explicit user assumption, never represented as a sourced disclosure. */
|
|
31
|
+
transmission?: {
|
|
32
|
+
basis: ExposureBasis
|
|
33
|
+
exposurePct: ExposureRange
|
|
34
|
+
/** Change in the denominator per unit change in the shock. */
|
|
35
|
+
factor: ExposureRange
|
|
36
|
+
direction?: 1 | -1
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export interface ExposureScenario {
|
|
40
|
+
id?: string
|
|
41
|
+
label: string
|
|
42
|
+
shocks: ExposureShock[]
|
|
43
|
+
}
|
|
44
|
+
export interface ExposureHolding {
|
|
45
|
+
symbol: string
|
|
46
|
+
/** Signed fraction of NAV; 0.25 = 25%, -0.1 = 10% short. */
|
|
47
|
+
weight: number
|
|
48
|
+
}
|
|
49
|
+
export interface ExposureRequest {
|
|
50
|
+
holdings: ExposureHolding[]
|
|
51
|
+
scenario: ExposureScenario
|
|
52
|
+
depth?: number
|
|
53
|
+
/** Cash weight in NAV fractions, never used to renormalize holding weights. */
|
|
54
|
+
cashWeight?: number
|
|
55
|
+
}
|
|
56
|
+
export interface ExposureEvidence {
|
|
57
|
+
id: string
|
|
58
|
+
source: string
|
|
59
|
+
tier: EvidenceTier | "profile" | "user"
|
|
60
|
+
url: string | null
|
|
61
|
+
quote: string | null
|
|
62
|
+
asOf: string | null
|
|
63
|
+
period: string | null
|
|
64
|
+
units: string
|
|
65
|
+
currency: string | null
|
|
66
|
+
confidence: number | null
|
|
67
|
+
/** Corrections must supersede explicitly; adapters return the current revision. */
|
|
68
|
+
revision?: string | null
|
|
69
|
+
}
|
|
70
|
+
export interface ExposureExtensionObservation {
|
|
71
|
+
id: string
|
|
72
|
+
label: string
|
|
73
|
+
kind: "kpi" | "credit" | "guidance"
|
|
74
|
+
value: number | null
|
|
75
|
+
units: string
|
|
76
|
+
evidence: ExposureEvidence[]
|
|
77
|
+
currency?: string | null
|
|
78
|
+
period?: string | null
|
|
79
|
+
asOf?: string | null
|
|
80
|
+
basis?: string
|
|
81
|
+
dimensions?: Record<string, string>
|
|
82
|
+
qualifier?: string
|
|
83
|
+
range?: { low: number | null; high: number | null }
|
|
84
|
+
valueText?: string
|
|
85
|
+
status?: string
|
|
86
|
+
notes?: string[]
|
|
87
|
+
sensitivity?: {
|
|
88
|
+
kind: ExposureShockKind
|
|
89
|
+
target: string
|
|
90
|
+
basis: ExposureBasis
|
|
91
|
+
period: string
|
|
92
|
+
exposurePct: ExposureRange
|
|
93
|
+
factor: ExposureRange
|
|
94
|
+
direction: 1 | -1
|
|
95
|
+
} | null
|
|
96
|
+
}
|
|
97
|
+
interface ExposurePathHop {
|
|
98
|
+
from: { id: string; name: string; symbol: string | null; country: string | null }
|
|
99
|
+
to: { id: string; name: string; symbol: string | null; country: string | null }
|
|
100
|
+
evidence: ExposureEvidence[]
|
|
101
|
+
pct: number | null
|
|
102
|
+
basis: ExposureBasis | null
|
|
103
|
+
denominatorEntityId: string | null
|
|
104
|
+
}
|
|
105
|
+
export interface ExposureComponent {
|
|
106
|
+
id: string
|
|
107
|
+
shockId: string
|
|
108
|
+
label: string
|
|
109
|
+
channel: "geography" | "product" | "supplier" | "customer" | "profile" | "assumption" | "extension"
|
|
110
|
+
order: number
|
|
111
|
+
basis: ExposureBasis | null
|
|
112
|
+
period: string | null
|
|
113
|
+
classification: "disclosed" | "estimated" | "unknown"
|
|
114
|
+
exposurePct: ExposureRange | null
|
|
115
|
+
/** Estimated operating-denominator change; never a stock-return forecast. */
|
|
116
|
+
impactPct: ExposureRange | null
|
|
117
|
+
proportionalEstimatePct?: number | null
|
|
118
|
+
evidence: ExposureEvidence[]
|
|
119
|
+
path: ExposurePathHop[]
|
|
120
|
+
unknowns: string[]
|
|
121
|
+
/** Used only internally for validated disjoint revenue partitions. */
|
|
122
|
+
partition?: string | null
|
|
123
|
+
}
|
|
124
|
+
interface ExposureMeasure {
|
|
125
|
+
shockId: string
|
|
126
|
+
basis: ExposureBasis
|
|
127
|
+
period: string
|
|
128
|
+
exposurePct: ExposureRange
|
|
129
|
+
impactPct: ExposureRange | null
|
|
130
|
+
classification: "disclosed" | "estimated"
|
|
131
|
+
componentIds: string[]
|
|
132
|
+
/** True when an unquantified matching relationship prevents a complete bound. */
|
|
133
|
+
incomplete: boolean
|
|
134
|
+
}
|
|
135
|
+
interface ExposureHoldingResult {
|
|
136
|
+
symbol: string
|
|
137
|
+
name: string | null
|
|
138
|
+
weight: number
|
|
139
|
+
status: "quantified" | "partial" | "unknown"
|
|
140
|
+
measures: ExposureMeasure[]
|
|
141
|
+
components: ExposureComponent[]
|
|
142
|
+
extensions: ExposureExtensionObservation[]
|
|
143
|
+
unknowns: string[]
|
|
144
|
+
coverage: {
|
|
145
|
+
revenueRows: number
|
|
146
|
+
graphNodes: number
|
|
147
|
+
graphLinks: number
|
|
148
|
+
matchedPaths: number
|
|
149
|
+
quantifiedComponents: number
|
|
150
|
+
unknownComponents: number
|
|
151
|
+
graphComplete: boolean
|
|
152
|
+
oldestEvidenceAt: string | null
|
|
153
|
+
latestEvidenceAt: string | null
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
interface ExposurePortfolioMeasure {
|
|
157
|
+
shockId: string
|
|
158
|
+
basis: ExposureBasis
|
|
159
|
+
period: string
|
|
160
|
+
/** Holding-weighted operating exposure, in NAV-weighted percentage points. */
|
|
161
|
+
signedExposurePct: ExposureRange
|
|
162
|
+
grossExposurePct: ExposureRange
|
|
163
|
+
impactPct: ExposureRange | null
|
|
164
|
+
coveredGrossWeight: number
|
|
165
|
+
unknownGrossWeight: number
|
|
166
|
+
symbols: string[]
|
|
167
|
+
}
|
|
168
|
+
interface ExposureConcentration {
|
|
169
|
+
kind: "country" | "supplier" | "customer"
|
|
170
|
+
key: string
|
|
171
|
+
label: string
|
|
172
|
+
basis: ExposureBasis | null
|
|
173
|
+
period: string | null
|
|
174
|
+
grossExposurePct: ExposureRange | null
|
|
175
|
+
signedExposurePct: ExposureRange | null
|
|
176
|
+
grossHoldingWeight: number
|
|
177
|
+
symbols: string[]
|
|
178
|
+
evidence: ExposureEvidence[]
|
|
179
|
+
incomplete: boolean
|
|
180
|
+
}
|
|
181
|
+
export interface ExposurePayload {
|
|
182
|
+
version: 1
|
|
183
|
+
scenario: ExposureScenario
|
|
184
|
+
evaluatedAt: string
|
|
185
|
+
access: "full" | "preview"
|
|
186
|
+
depth: number
|
|
187
|
+
requestedHoldings: number
|
|
188
|
+
lockedHoldings: number
|
|
189
|
+
holdings: ExposureHoldingResult[]
|
|
190
|
+
portfolio: {
|
|
191
|
+
grossWeight: number
|
|
192
|
+
netWeight: number
|
|
193
|
+
cashWeight: number | null
|
|
194
|
+
/** 1 - net holding weights - explicit cash, financing/residual if not zero. */
|
|
195
|
+
residualWeight: number
|
|
196
|
+
measures: ExposurePortfolioMeasure[]
|
|
197
|
+
concentrations: ExposureConcentration[]
|
|
198
|
+
unknownGrossWeight: number
|
|
199
|
+
}
|
|
200
|
+
unknowns: string[]
|
|
201
|
+
methodology: string[]
|
|
202
|
+
}
|