gloomberb 0.16.0 → 0.16.2
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 -1
- package/package.json +2 -1
- package/src/api-client/beneficial-owners.ts +92 -0
- package/src/api-client/data.ts +44 -11
- package/src/api-client/errors.ts +12 -0
- package/src/api-client/geo.ts +363 -0
- package/src/api-client/index.ts +5 -0
- package/src/api-client/market-discovery.ts +10 -0
- package/src/api-client/members.ts +26 -0
- package/src/api-client/paths.ts +30 -1
- package/src/api-client/perps.ts +41 -0
- package/src/api-client/request.ts +5 -2
- package/src/api-client/types.ts +9 -1
- package/src/app/global-shortcuts.ts +14 -6
- package/src/app/keybindings/actions.ts +1 -1
- package/src/app/runtime/update.ts +38 -2
- package/src/app.tsx +10 -6
- package/src/brokers/account-cache.ts +24 -0
- package/src/cli/commands/command-utils.ts +8 -0
- package/src/cli/commands/crypto-hints.ts +75 -0
- package/src/cli/commands/market.ts +414 -106
- package/src/cli/commands/overview.ts +77 -32
- package/src/cli/commands/ticker.ts +101 -43
- package/src/cli/desktop-pane-shot.ts +34 -4
- package/src/cli/freshness.ts +61 -0
- package/src/cli/help.ts +1 -0
- package/src/cli/helpers.ts +4 -8
- package/src/cli/index.ts +12 -2
- package/src/cli/listing-arg.ts +321 -0
- package/src/cli/pane-functions/access-gate.ts +42 -0
- package/src/cli/pane-functions/catalog.ts +28 -1
- package/src/cli/pane-functions/data.ts +3 -1
- package/src/cli/pane-functions/dom.ts +20 -2
- package/src/cli/pane-functions/freshness.ts +400 -0
- package/src/cli/pane-functions/function-help.ts +36 -22
- package/src/cli/pane-functions/headless.ts +39 -11
- package/src/cli/pane-functions/index.ts +15 -4
- package/src/cli/pane-functions/options.ts +3 -0
- package/src/cli/pane-functions/report.ts +4 -0
- package/src/cli/pane-functions/resolver.ts +35 -7
- package/src/cli/pane-functions/screenshot-evidence.ts +2 -0
- package/src/cli/pane-functions/screenshot.ts +7 -3
- package/src/cli/result.ts +41 -27
- package/src/cli/ticker-resolution.ts +7 -5
- package/src/components/chart/composite/composite-chart.tsx +88 -2536
- package/src/components/chart/composite/drawing-store.ts +59 -0
- package/src/components/chart/composite/legend.tsx +319 -0
- package/src/components/chart/composite/panel-bitmap.ts +139 -0
- package/src/components/chart/composite/panel-gestures.ts +59 -0
- package/src/components/chart/composite/panel-labels.ts +107 -0
- package/src/components/chart/composite/panel-surface.tsx +876 -0
- package/src/components/chart/composite/tool-catalog.ts +98 -0
- package/src/components/chart/composite/toolbar.tsx +186 -0
- package/src/components/chart/composite/tools.ts +8 -0
- package/src/components/chart/composite/use-composite-chart-keyboard.ts +703 -0
- package/src/components/chart/composite/use-composite-viewport.ts +143 -0
- package/src/components/command-bar/commands/collection.ts +5 -1
- package/src/components/command-bar/list/model.ts +5 -0
- package/src/components/command-bar/list/view.tsx +16 -3
- package/src/components/command-bar/pane-templates/workflow.ts +1 -0
- package/src/components/command-bar/routes/root/command-items.ts +9 -2
- package/src/components/command-bar/routes/root/plugin-install.ts +2 -2
- package/src/components/command-bar/routes/root/provider-search.ts +19 -5
- package/src/components/command-bar/routes/root/runtime.ts +14 -5
- package/src/components/command-bar/routes/ticker-search/actions.ts +5 -0
- package/src/components/command-bar/routes/ticker-search/results.ts +31 -5
- package/src/components/command-bar/routes/ticker-search/route.ts +2 -2
- package/src/components/command-bar/routing/actions.ts +2 -0
- package/src/components/command-bar/selection-runtime.ts +38 -0
- package/src/components/command-bar/surface/index.tsx +7 -2
- package/src/components/command-bar/workflow/ops.ts +1 -1
- package/src/components/command-bar/workflow/tickers.ts +6 -0
- package/src/components/data-table/view.tsx +29 -10
- package/src/components/feedback-dialog.tsx +2 -1
- package/src/components/form-modal/field-row.tsx +2 -2
- package/src/components/index.ts +2 -2
- package/src/components/layout/detached-pane-shell.tsx +6 -3
- package/src/components/layout/floating-pane.tsx +6 -0
- package/src/components/layout/header.tsx +24 -7
- package/src/components/layout/missing-pane.tsx +2 -2
- package/src/components/layout/pane/content.tsx +23 -10
- package/src/components/layout/pane/error-boundary.tsx +103 -0
- package/src/components/layout/pane/footer/registration.tsx +68 -23
- package/src/components/layout/pane/header.tsx +61 -28
- package/src/components/layout/pane/index.tsx +6 -0
- package/src/components/layout/pane/title.ts +31 -7
- package/src/components/layout/shell/drag/index.ts +6 -5
- package/src/components/layout/shell/drag/runtime.ts +3 -0
- package/src/components/layout/shell/index.tsx +6 -0
- package/src/components/layout/shell/menu.ts +2 -1
- package/src/components/layout/shell/pane/actions.ts +2 -1
- package/src/components/layout/shell/pane/layers.tsx +29 -10
- package/src/components/layout/shell/terminal-pointer-runtime.ts +24 -3
- package/src/components/layout/shell/ticker-link-menu.ts +23 -9
- package/src/components/metric-treemap/heat-surface.tsx +745 -0
- package/src/components/metric-treemap/heat-tiles.ts +228 -0
- package/src/components/metric-treemap/index.tsx +2 -0
- package/src/components/metric-treemap/layout.ts +8 -0
- package/src/components/metric-treemap/scene.ts +432 -0
- package/src/components/onboarding/onboarding-keyboard.ts +311 -0
- package/src/components/onboarding/onboarding-wizard.tsx +101 -788
- package/src/components/onboarding/use-onboarding-broker-form.ts +263 -0
- package/src/components/onboarding/use-onboarding-progress.ts +298 -0
- package/src/components/onboarding/use-onboarding-upgrade.ts +83 -0
- package/src/components/pane-settings-dialog/field-dialogs.tsx +1 -0
- package/src/components/ticker/list-table-view.tsx +13 -1
- package/src/components/toggle-list.tsx +38 -12
- package/src/components/ui/country-flag-art.tsx +449 -0
- package/src/components/ui/country-flag.tsx +41 -0
- package/src/components/ui/data-table/types.ts +13 -0
- package/src/components/ui/fields.tsx +8 -0
- package/src/components/ui/icon.tsx +2 -0
- package/src/components/ui/index.ts +4 -0
- package/src/components/ui/multi-select/dialog.tsx +108 -22
- package/src/components/ui/range-track.tsx +53 -0
- package/src/components/ui/status.tsx +8 -2
- package/src/components/ui/tabs.tsx +11 -4
- package/src/components/ui/text-prompt-dialog.tsx +4 -2
- package/src/core/state/app/types.ts +10 -1
- package/src/data/config/store/normalize.ts +17 -1
- package/src/i18n/es.ts +24 -4
- package/src/i18n/ja.ts +24 -4
- package/src/i18n/ko.ts +24 -4
- package/src/i18n/zh-cn.ts +24 -4
- package/src/i18n/zh-tw.ts +24 -4
- package/src/layout/ticker-navigation.ts +28 -2
- package/src/market-data/coordinator/chart.ts +1 -1
- package/src/market-data/coordinator/quotes.ts +23 -4
- package/src/market-data/fx-closes.ts +72 -0
- package/src/market-data/market/freshness.ts +78 -6
- package/src/market-data/market/session-close-note.ts +57 -0
- package/src/market-data/market/status.ts +151 -0
- package/src/market-data/published-apac-sessions.ts +66 -0
- package/src/market-data/quotes/contributions.ts +8 -0
- package/src/market-data/quotes/freshness.ts +36 -0
- package/src/market-data/quotes/resolution.ts +24 -8
- package/src/market-data/quotes/screener-live-quotes.ts +49 -4
- package/src/market-data/quotes/time.ts +16 -0
- package/src/plugins/builtin/account-management/pane.tsx +4 -0
- package/src/plugins/builtin/alerts/cli.ts +10 -5
- package/src/plugins/builtin/alerts/index.tsx +1 -0
- package/src/plugins/builtin/analytics/metrics.ts +8 -3
- package/src/plugins/builtin/analytics/risk-client.ts +330 -79
- package/src/plugins/builtin/analytics/risk-fx.ts +102 -0
- package/src/plugins/builtin/analytics/risk-headless.ts +61 -49
- package/src/plugins/builtin/analytics/risk-math.ts +33 -13
- package/src/plugins/builtin/analytics/risk-model.ts +282 -64
- package/src/plugins/builtin/analytics/risk-pane.tsx +62 -30
- package/src/plugins/builtin/analytics/risk-test-data.ts +206 -0
- package/src/plugins/builtin/attention/headless.ts +6 -4
- package/src/plugins/builtin/attention/index.tsx +1 -1
- package/src/plugins/builtin/attention/pane.tsx +1 -1
- package/src/plugins/builtin/awards/headless.ts +1 -0
- package/src/plugins/builtin/awards/pane.tsx +1 -1
- package/src/plugins/builtin/backtest/headless.ts +1 -0
- package/src/plugins/builtin/bond-calculator/headless.ts +1 -0
- package/src/plugins/builtin/buildout/cells.tsx +15 -12
- package/src/plugins/builtin/buildout/detail/company.tsx +3 -3
- package/src/plugins/builtin/buildout/detail/index.tsx +0 -1
- package/src/plugins/builtin/buildout/detail/intel.tsx +6 -6
- package/src/plugins/builtin/buildout/detail/site.tsx +4 -7
- package/src/plugins/builtin/buildout/detail/ui.tsx +0 -19
- package/src/plugins/builtin/buildout/index.tsx +1 -0
- package/src/plugins/builtin/catalysts/headless.ts +3 -1
- package/src/plugins/builtin/catalysts/index.tsx +2 -2
- package/src/plugins/builtin/catalysts/pane.tsx +3 -1
- package/src/plugins/builtin/cds/headless.ts +2 -0
- package/src/plugins/builtin/cds/index.tsx +1 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +1 -0
- package/src/plugins/builtin/chart-composer/headless.ts +38 -3
- package/src/plugins/builtin/chart-composer/index.tsx +3 -1
- package/src/plugins/builtin/chart-composer/series-expression.ts +18 -2
- package/src/plugins/builtin/chat/channels.ts +19 -3
- package/src/plugins/builtin/chat/content/composer-runtime.ts +28 -13
- package/src/plugins/builtin/chat/content/footer.tsx +15 -6
- package/src/plugins/builtin/chat/content/index.tsx +120 -21
- package/src/plugins/builtin/chat/content/new-dm-dialog.tsx +261 -113
- package/src/plugins/builtin/chat/content/transcript.tsx +20 -2
- package/src/plugins/builtin/chat/direct-messages.ts +200 -0
- package/src/plugins/builtin/chat/index.tsx +1 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +3 -0
- package/src/plugins/builtin/chat/message/header.tsx +16 -6
- package/src/plugins/builtin/chat/message/inline-tokens.tsx +72 -32
- package/src/plugins/builtin/chat/message/profile-popover.tsx +96 -12
- package/src/plugins/builtin/chat/message/terminal.tsx +3 -0
- package/src/plugins/builtin/chat/message/types.ts +14 -2
- package/src/plugins/builtin/chat/profile-popover.ts +18 -13
- package/src/plugins/builtin/clinical-trials/index.tsx +1 -0
- package/src/plugins/builtin/cloud/askg/executor.ts +2 -1
- package/src/plugins/builtin/cloud/plugin.tsx +1 -0
- package/src/plugins/builtin/cloud/team/module.tsx +1 -0
- package/src/plugins/builtin/cloud/thesis/module.tsx +1 -0
- package/src/plugins/builtin/cloud-tweets/registration.ts +1 -0
- package/src/plugins/builtin/comment-letters/index.tsx +1 -0
- package/src/plugins/builtin/company-attention/headless.ts +5 -1
- package/src/plugins/builtin/company-attention/pane.tsx +1 -1
- package/src/plugins/builtin/company-kpis/headless.ts +1 -0
- package/src/plugins/builtin/congress-trades/headless.ts +1 -0
- package/src/plugins/builtin/correlation/compute.ts +59 -16
- package/src/plugins/builtin/correlation/geo.ts +34 -0
- package/src/plugins/builtin/correlation/headless-schema.ts +4 -1
- package/src/plugins/builtin/correlation/headless.ts +42 -8
- package/src/plugins/builtin/correlation/history.ts +2 -0
- package/src/plugins/builtin/correlation/index.tsx +68 -14
- package/src/plugins/builtin/correlation/matrix/model.ts +17 -2
- package/src/plugins/builtin/correlation/matrix/selection.ts +5 -3
- package/src/plugins/builtin/correlation/relationship/model.ts +1 -1
- package/src/plugins/builtin/correlation/relationship/pane.tsx +4 -2
- package/src/plugins/builtin/correlation/relationship/view-model.ts +16 -1
- package/src/plugins/builtin/correlation/settings.ts +1 -1
- package/src/plugins/builtin/cot/headless.ts +6 -3
- package/src/plugins/builtin/cot/index.tsx +3 -3
- package/src/plugins/builtin/cot/model.ts +36 -3
- package/src/plugins/builtin/cpi/headless.ts +4 -0
- package/src/plugins/builtin/credit-boards/headless.ts +2 -0
- package/src/plugins/builtin/credit-conditions/headless.ts +1 -0
- package/src/plugins/builtin/credit-documents/gauge.tsx +5 -8
- package/src/plugins/builtin/credit-documents/headless.ts +2 -0
- package/src/plugins/builtin/crypto-board/headless.ts +3 -0
- package/src/plugins/builtin/custom-view/loader.ts +1 -1
- package/src/plugins/builtin/debt-maturities/headless.ts +4 -0
- package/src/plugins/builtin/debt-maturities/wall-bar.tsx +14 -41
- package/src/plugins/builtin/dividend-yield/client.ts +4 -2
- package/src/plugins/builtin/dividend-yield/headless.ts +1 -0
- package/src/plugins/builtin/doe/headless.ts +7 -0
- package/src/plugins/builtin/doe/range-bar.tsx +7 -37
- package/src/plugins/builtin/earnings/client.ts +2 -2
- package/src/plugins/builtin/earnings/headless.ts +5 -0
- package/src/plugins/builtin/earnings-calls/headless.ts +1 -0
- package/src/plugins/builtin/earnings-calls/index.tsx +1 -0
- package/src/plugins/builtin/earnings-ripple/client.ts +91 -18
- package/src/plugins/builtin/earnings-ripple/headless.ts +28 -8
- package/src/plugins/builtin/earnings-ripple/index.tsx +2 -2
- package/src/plugins/builtin/earnings-ripple/model.ts +97 -7
- package/src/plugins/builtin/earnings-ripple/pane.tsx +148 -23
- package/src/plugins/builtin/econ/index.tsx +1 -0
- package/src/plugins/builtin/econ-statistics/headless.ts +2 -0
- package/src/plugins/builtin/equity-screener/headless.ts +2 -0
- package/src/plugins/builtin/estimate-revisions/headless.ts +1 -0
- package/src/plugins/builtin/executives/index.tsx +1 -0
- package/src/plugins/builtin/exposure/headless.ts +3 -1
- package/src/plugins/builtin/fear-greed/headless.ts +2 -0
- package/src/plugins/builtin/filing-events/index.tsx +1 -0
- package/src/plugins/builtin/futures-curve/client.ts +12 -3
- package/src/plugins/builtin/futures-curve/headless.ts +39 -10
- package/src/plugins/builtin/futures-curve/index.tsx +3 -3
- package/src/plugins/builtin/futures-curve/model.ts +188 -4
- package/src/plugins/builtin/futures-curve/pane.tsx +51 -9
- package/src/plugins/builtin/fx-matrix/direction.ts +81 -0
- package/src/plugins/builtin/fx-matrix/index.tsx +71 -33
- package/src/plugins/builtin/fx-matrix/live-legs.ts +17 -0
- package/src/plugins/builtin/fx-matrix/pairs.ts +68 -14
- package/src/plugins/builtin/fx-matrix/settings.ts +62 -0
- package/src/plugins/builtin/gpu/headless.ts +7 -3
- package/src/plugins/builtin/gpu/ladder.tsx +26 -30
- package/src/plugins/builtin/gpu/model.ts +27 -1
- package/src/plugins/builtin/holders/beneficial-client.ts +209 -0
- package/src/plugins/builtin/holders/beneficial-model.ts +279 -0
- package/src/plugins/builtin/holders/beneficial-report.ts +126 -0
- package/src/plugins/builtin/holders/beneficial-view.tsx +241 -0
- package/src/plugins/builtin/holders/headless.ts +139 -5
- package/src/plugins/builtin/holders/index.tsx +10 -3
- package/src/plugins/builtin/holders/pane.tsx +20 -3
- package/src/plugins/builtin/holders/report-header.ts +95 -0
- package/src/plugins/builtin/holders/table-model.ts +20 -5
- package/src/plugins/builtin/holders/thirteenf-match.ts +29 -1
- package/src/plugins/builtin/holders/types.ts +2 -1
- package/src/plugins/builtin/insider/headless.ts +2 -0
- package/src/plugins/builtin/ipo-calendar/headless.ts +1 -0
- package/src/plugins/builtin/iv-history/headless.ts +4 -1
- package/src/plugins/builtin/jobs/headless.ts +1 -0
- package/src/plugins/builtin/jobs/index.tsx +1 -0
- package/src/plugins/builtin/jobs/share-bars.tsx +5 -28
- package/src/plugins/builtin/kelly-sizer/index.tsx +1 -0
- package/src/plugins/builtin/macro-day/headless.ts +2 -0
- package/src/plugins/builtin/market-halts/index.tsx +1 -0
- package/src/plugins/builtin/market-heatmap/data.ts +30 -2
- package/src/plugins/builtin/market-heatmap/headless.ts +135 -0
- package/src/plugins/builtin/market-heatmap/index.tsx +245 -81
- package/src/plugins/builtin/market-heatmap/live.ts +88 -0
- package/src/plugins/builtin/market-heatmap/model.ts +146 -0
- package/src/plugins/builtin/market-heatmap/portfolio.ts +50 -11
- package/src/plugins/builtin/market-movers/client.ts +3 -2
- package/src/plugins/builtin/market-movers/headless.ts +10 -1
- package/src/plugins/builtin/market-movers/screener.ts +18 -5
- package/src/plugins/builtin/market-valuation/headless.ts +2 -0
- package/src/plugins/builtin/members/client.ts +53 -0
- package/src/plugins/builtin/members/headless.ts +35 -0
- package/src/plugins/builtin/members/index.tsx +20 -0
- package/src/plugins/builtin/members/model.ts +68 -0
- package/src/plugins/builtin/members/pane.tsx +175 -0
- package/src/plugins/builtin/mna/distress/headless.ts +1 -0
- package/src/plugins/builtin/mna/headless.ts +1 -0
- package/src/plugins/builtin/mna/index.tsx +2 -1
- package/src/plugins/builtin/mna/pane.tsx +5 -2
- package/src/plugins/builtin/money-markets/headless.ts +1 -0
- package/src/plugins/builtin/news/headless.ts +2 -0
- package/src/plugins/builtin/news/wire/index.tsx +8 -1
- package/src/plugins/builtin/notes/cli.ts +14 -6
- package/src/plugins/builtin/notes/index.tsx +1 -0
- package/src/plugins/builtin/openfda/index.tsx +1 -0
- package/src/plugins/builtin/options/index.tsx +2 -1
- package/src/plugins/builtin/options-calculator/headless.ts +2 -0
- package/src/plugins/builtin/options-positioning/headless.ts +3 -0
- package/src/plugins/builtin/options-scenario/headless.ts +5 -0
- package/src/plugins/builtin/pe-band/client.ts +74 -2
- package/src/plugins/builtin/pe-band/headless.ts +26 -8
- package/src/plugins/builtin/pe-band/model.ts +102 -22
- package/src/plugins/builtin/pe-band/pane.tsx +34 -16
- package/src/plugins/builtin/pe-band/report-dates.ts +78 -0
- package/src/plugins/builtin/perps/client.ts +66 -5
- package/src/plugins/builtin/perps/equity-identity.ts +16 -0
- package/src/plugins/builtin/perps/equity-row.tsx +6 -4
- package/src/plugins/builtin/perps/headless.ts +144 -16
- package/src/plugins/builtin/perps/index.tsx +6 -6
- package/src/plugins/builtin/perps/model.ts +189 -12
- package/src/plugins/builtin/perps/pane.tsx +248 -47
- package/src/plugins/builtin/plugin-marketplace/activation.ts +19 -0
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +2 -2
- package/src/plugins/builtin/plugin-marketplace/store.ts +2 -0
- package/src/plugins/builtin/portfolio-list/allocation.ts +245 -0
- package/src/plugins/builtin/portfolio-list/cached-account.ts +33 -0
- package/src/plugins/builtin/portfolio-list/cell-version.ts +19 -1
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +328 -29
- package/src/plugins/builtin/portfolio-list/cli/render.ts +230 -39
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +67 -2
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +35 -31
- package/src/plugins/builtin/portfolio-list/column-values.ts +124 -47
- package/src/plugins/builtin/portfolio-list/headless.ts +98 -16
- package/src/plugins/builtin/portfolio-list/index.tsx +14 -3
- package/src/plugins/builtin/portfolio-list/live-valuation.ts +7 -5
- package/src/plugins/builtin/portfolio-list/mutations.ts +55 -1
- package/src/plugins/builtin/portfolio-list/pane/data.ts +6 -0
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +47 -13
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +43 -2
- package/src/plugins/builtin/portfolio-list/quick-add/resolution.ts +48 -5
- package/src/plugins/builtin/portfolio-list/settings.ts +33 -2
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +24 -1
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +26 -7
- package/src/plugins/builtin/power/headless.ts +3 -1
- package/src/plugins/builtin/rate-path/headless.ts +2 -0
- package/src/plugins/builtin/realized-vol/headless.ts +2 -0
- package/src/plugins/builtin/relative-rotation/headless.ts +2 -0
- package/src/plugins/builtin/research/analyst-headless.ts +3 -0
- package/src/plugins/builtin/research/events-headless.ts +2 -0
- package/src/plugins/builtin/research/headless.ts +2 -0
- package/src/plugins/builtin/research/index.tsx +1 -0
- package/src/plugins/builtin/research/relative-valuation-headless.ts +10 -5
- package/src/plugins/builtin/research/relative-valuation-model.ts +11 -3
- package/src/plugins/builtin/research/relative-valuation-pane.tsx +3 -3
- package/src/plugins/builtin/research-search/index.tsx +1 -0
- package/src/plugins/builtin/revenue-breakdown/headless.ts +2 -0
- package/src/plugins/builtin/reverse-dcf/headless.ts +2 -0
- package/src/plugins/builtin/risk-factors/headless.ts +2 -0
- package/src/plugins/builtin/scanner/flow-history.ts +2 -13
- package/src/plugins/builtin/scanner/headless.ts +14 -0
- package/src/plugins/builtin/scanner/hilo-bars.tsx +12 -70
- package/src/plugins/builtin/scanner/hilo-model.ts +0 -18
- package/src/plugins/builtin/seasonality/headless.ts +2 -0
- package/src/plugins/builtin/sec/command-bar-search.ts +14 -4
- package/src/plugins/builtin/sec/filing-content.ts +42 -17
- package/src/plugins/builtin/sec/forms.ts +12 -0
- package/src/plugins/builtin/sec/headless.ts +2 -0
- package/src/plugins/builtin/sectors/client.ts +1 -0
- package/src/plugins/builtin/sectors/headless.ts +9 -1
- package/src/plugins/builtin/sectors/move-bar.tsx +10 -32
- package/src/plugins/builtin/sectors/sector-model.ts +2 -0
- package/src/plugins/builtin/shared/crypto-pair.ts +14 -0
- package/src/plugins/builtin/shared/locked-rows.tsx +1 -1
- package/src/plugins/builtin/shared/report-freshness.ts +57 -0
- package/src/plugins/builtin/shared/research-cells.tsx +4 -9
- package/src/plugins/builtin/short-interest/headless.ts +2 -0
- package/src/plugins/builtin/short-interest/watch-headless.ts +1 -0
- package/src/plugins/builtin/short-volume/headless.ts +1 -0
- package/src/plugins/builtin/social-mentions/headless.ts +1 -0
- package/src/plugins/builtin/social-mentions/index.tsx +1 -1
- package/src/plugins/builtin/supply-chain/headless.ts +7 -1
- package/src/plugins/builtin/supply-chain/index.tsx +10 -1
- package/src/plugins/builtin/supply-chain/model.ts +27 -2
- package/src/plugins/builtin/supply-chain/pane.tsx +71 -32
- package/src/plugins/builtin/themes/headless.ts +3 -0
- package/src/plugins/builtin/thirteenf/headless.ts +110 -25
- package/src/plugins/builtin/thirteenf/index.tsx +2 -1
- package/src/plugins/builtin/thirteenf/report-notes.ts +149 -0
- package/src/plugins/builtin/ticker-detail/headless.ts +7 -1
- package/src/plugins/builtin/ticker-detail/index.tsx +1 -0
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +5 -60
- package/src/plugins/builtin/ticker-detail/overview/model.ts +9 -2
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +26 -26
- package/src/plugins/builtin/ticker-detail/pane.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/quote-footer.ts +7 -1
- package/src/plugins/builtin/ticker-detail/quote-monitor/card.tsx +20 -4
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +2 -2
- package/src/plugins/builtin/time-sales/headless.ts +5 -1
- package/src/plugins/builtin/treasury-auctions/headless.ts +1 -0
- package/src/plugins/builtin/vol-surface/index.tsx +1 -1
- package/src/plugins/builtin/volatility/headless.ts +6 -1
- package/src/plugins/builtin/world-indices/headless.ts +2 -0
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +157 -0
- package/src/plugins/builtin/world-venue-map/basemap.ts +214 -0
- package/src/plugins/builtin/world-venue-map/client.ts +45 -0
- package/src/plugins/builtin/world-venue-map/entity-detail.tsx +147 -0
- package/src/plugins/builtin/world-venue-map/entity-table.ts +59 -0
- package/src/plugins/builtin/world-venue-map/evidence.ts +77 -0
- package/src/plugins/builtin/world-venue-map/feed.ts +293 -0
- package/src/plugins/builtin/world-venue-map/geo-draw.tsx +248 -0
- package/src/plugins/builtin/world-venue-map/geo-series.ts +142 -0
- package/src/plugins/builtin/world-venue-map/geo-svg.tsx +447 -0
- package/src/plugins/builtin/world-venue-map/headless.ts +146 -0
- package/src/plugins/builtin/world-venue-map/ids.ts +1 -0
- package/src/plugins/builtin/world-venue-map/index.ts +67 -4
- package/src/plugins/builtin/world-venue-map/layered-pane.tsx +552 -0
- package/src/plugins/builtin/world-venue-map/layers.ts +348 -0
- package/src/plugins/builtin/world-venue-map/map-symbols.ts +220 -0
- package/src/plugins/builtin/world-venue-map/map.tsx +381 -45
- package/src/plugins/builtin/world-venue-map/model.ts +7 -4
- package/src/plugins/builtin/world-venue-map/natural-earth/index.chunk.ts +199 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e000s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e015s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e030s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e045s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e060s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e075s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e090s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e105s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e120s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e135s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e150s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/e165s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w015s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w030s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w045s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w060s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w075s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w090s60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w105s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w120s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135n30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135n75.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w135s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w150n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w150n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w150s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w150s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w165s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180n00.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180n15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180n45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180n60.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180s15.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180s30.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/tiles/w180s45.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/natural-earth/world-50m.chunk.ts +4 -0
- package/src/plugins/builtin/world-venue-map/pane.tsx +28 -43
- package/src/plugins/builtin/world-venue-map/use-geo.ts +55 -0
- package/src/plugins/builtin/world-venue-map/venue-header.tsx +32 -0
- package/src/plugins/builtin/yield-curve/headless.ts +16 -0
- package/src/plugins/catalog-browser.ts +2 -0
- package/src/plugins/catalog-manifest.ts +1 -0
- package/src/plugins/catalog-ui.ts +3 -1
- package/src/plugins/catalog.ts +1 -1
- package/src/plugins/host-link.ts +33 -1
- package/src/plugins/installer.ts +48 -12
- package/src/plugins/loader.ts +30 -3
- package/src/plugins/manager-node.ts +15 -5
- package/src/plugins/registry/index.ts +1 -1
- package/src/plugins/registry/pane-settings.ts +26 -7
- package/src/public/__snapshots__/public-api.test.ts.snap +2 -0
- package/src/renderers/dom/build-assets.ts +81 -3
- package/src/renderers/dom/data-table/row.tsx +52 -16
- package/src/renderers/dom/desktop/controls.tsx +7 -3
- package/src/renderers/dom/desktop/icons.tsx +1 -0
- package/src/renderers/dom/desktop/list-view.tsx +35 -10
- package/src/renderers/dom/desktop/popover.tsx +73 -14
- package/src/renderers/dom/host/box.tsx +69 -26
- package/src/renderers/dom/host/input.tsx +14 -3
- package/src/renderers/dom/host/tabs.tsx +37 -1
- package/src/renderers/dom/styles.css +41 -7
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +11 -6
- package/src/renderers/electrobun/bun/desktop/backend.ts +1 -0
- package/src/renderers/electrobun/bun/desktop/update.ts +181 -87
- package/src/renderers/electrobun/bun/index.ts +73 -6
- package/src/renderers/electrobun/bun/window/remembered-frame.ts +122 -0
- package/src/renderers/electrobun/shared/protocol.ts +3 -0
- package/src/renderers/electrobun/view/backend-rpc.ts +10 -4
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +3 -1
- package/src/renderers/electrobun/view/main.tsx +7 -1
- package/src/renderers/electrobun/view/renderer-window-error.ts +18 -0
- package/src/renderers/electrobun/view/rpc-timeout.ts +14 -3
- package/src/renderers/electrobun/view/update-host.ts +45 -21
- package/src/renderers/opentui/host.tsx +5 -0
- package/src/sources/gloomberb-cloud/index.ts +25 -4
- package/src/sources/gloomberb-cloud/normalizers.ts +36 -5
- package/src/sources/provider-router/cached-routes.ts +4 -1
- package/src/sources/provider-router/financials.ts +11 -8
- package/src/sources/provider-router/history.ts +15 -10
- package/src/sources/sec-registrant.ts +75 -0
- package/src/state/app/context/index.tsx +24 -8
- package/src/state/hooks/quote-streaming.ts +41 -26
- package/src/sync/core-contributors.ts +4 -0
- package/src/telemetry/benign-window-error.ts +7 -0
- package/src/telemetry/crash-reports-dom.ts +2 -0
- package/src/telemetry/crash-reports.ts +4 -1
- package/src/test-support/cli-context.ts +10 -2
- package/src/test-support/daily-nav.ts +25 -0
- package/src/theme/heat-colors.ts +357 -2
- package/src/tickers/instrument-kind.ts +34 -7
- package/src/tickers/search/asset-classes.ts +24 -9
- package/src/tickers/search/index.ts +44 -11
- package/src/tickers/search/ranking.ts +23 -3
- package/src/time-series/resolve.ts +1 -1
- package/src/time-series/use-chart-resolution.ts +1 -1
- package/src/types/context-menu.ts +6 -0
- package/src/types/data-provider.ts +2 -0
- package/src/types/financials.ts +5 -0
- package/src/types/headless.ts +79 -2
- package/src/types/plugin.ts +38 -6
- package/src/types/ticker.ts +15 -0
- package/src/ui/context-menu.tsx +1 -0
- package/src/ui/host.tsx +16 -0
- package/src/updater/index.ts +38 -13
- package/src/utils/async-deadline.ts +21 -0
- package/src/utils/cli-output.ts +5 -1
- package/src/utils/crypto-pair.ts +41 -0
- package/src/utils/currency-units.ts +14 -0
- package/src/utils/depositary-receipt.ts +26 -0
- package/src/utils/exchanges.ts +72 -0
- package/src/utils/fire-and-forget.ts +24 -0
- package/src/utils/format.ts +13 -0
- package/src/utils/price-earnings.ts +70 -3
- package/src/utils/price-history.ts +58 -13
- package/src/utils/rpc-timeout-error.ts +27 -0
- package/src/utils/sec.ts +13 -1
- package/src/utils/utc-time.ts +79 -0
package/README.md
CHANGED
|
@@ -86,7 +86,8 @@ Press `Ctrl+P` to open the command bar, or press `` ` `` to search for a ticker.
|
|
|
86
86
|
| `TOP` | Market stories |
|
|
87
87
|
| `WIRP` / `FFIP` | US rate path and conditional FOMC probabilities |
|
|
88
88
|
| `BTMM` | Funding rates, bill curves and Federal Reserve liquidity |
|
|
89
|
-
| `CTM [root]` | Futures contract curve, historical ghosts, roll yield and open interest, including `CTM VX` |
|
|
89
|
+
| `CTM [root]` | Futures contract curve, historical ghosts, roll yield and open interest, including `CTM VX` and CME crypto (`CTM BTC`) |
|
|
90
|
+
| `MAP ships` / `CHOKE` | Ships, ports, energy and airports on one map, and chokepoint transits as chart series ([guide](docs/world-map.md)) |
|
|
90
91
|
| `PF` | Portfolios and watchlists |
|
|
91
92
|
| `HELP` | Commands and keyboard shortcuts |
|
|
92
93
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gloomberb",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.2",
|
|
4
4
|
"packageManager": "bun@1.3.11",
|
|
5
5
|
"description": "Market research and portfolio tracker for the terminal",
|
|
6
6
|
"module": "src/public/index.ts",
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
"plugins:manifest:check": "bun run scripts/generate-plugin-manifest.ts --check",
|
|
67
67
|
"plugins:registry:check": "bun run scripts/check-registry-plugins.ts",
|
|
68
68
|
"web:proxy-hosts": "bun run scripts/generate-web-proxy-hosts.ts",
|
|
69
|
+
"map:data": "bun run scripts/generate-world-map-data.ts",
|
|
69
70
|
"web:proxy-hosts:check": "bun run scripts/generate-web-proxy-hosts.ts --check",
|
|
70
71
|
"typecheck": "bun run typecheck:opentui && bun run typecheck:dom && bun run typecheck:cloudflare && bun run typecheck:scripts && bun run typecheck:plugin-tests",
|
|
71
72
|
"typecheck:opentui": "tsc --project tsconfig.opentui.json",
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule 13D and 13G beneficial ownership reports about one issuer, as
|
|
3
|
+
* `GET /cloud/sec/beneficial-owners` returns them. Percentages are percent
|
|
4
|
+
* points (7.3 means 7.3% of the class) and dates are `YYYY-MM-DD`.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
type BeneficialOwnerKind = "13D" | "13G";
|
|
8
|
+
/**
|
|
9
|
+
* What the filer's latest report says it holds: `below-threshold` is a
|
|
10
|
+
* reported stake under 5% (still a stake, no longer reportable), `exited` a
|
|
11
|
+
* report of zero shares or 0%.
|
|
12
|
+
*/
|
|
13
|
+
export type BeneficialOwnerStatus = "holder" | "below-threshold" | "exited";
|
|
14
|
+
/** Which reports to list; the route takes the kind in capitals. */
|
|
15
|
+
export type BeneficialOwnersForm = "all" | BeneficialOwnerKind;
|
|
16
|
+
|
|
17
|
+
export interface BeneficialOwnerReportingPerson {
|
|
18
|
+
name: string;
|
|
19
|
+
cik: string | null;
|
|
20
|
+
percentOfClass: number | null;
|
|
21
|
+
shares: number | null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* One report: the latest per filer in `owners`, every report in `filings`.
|
|
26
|
+
* The previous-report fields and `status` come only with `owners`.
|
|
27
|
+
*/
|
|
28
|
+
export interface BeneficialOwnerFiling {
|
|
29
|
+
filerCik: string | null;
|
|
30
|
+
filerName: string;
|
|
31
|
+
/** The EDGAR form type as filed, such as `SCHEDULE 13G/A`. */
|
|
32
|
+
form: string;
|
|
33
|
+
kind: BeneficialOwnerKind;
|
|
34
|
+
amendment: boolean;
|
|
35
|
+
amendmentNo: number | null;
|
|
36
|
+
percentOfClass: number | null;
|
|
37
|
+
shares: number | null;
|
|
38
|
+
classTitle: string | null;
|
|
39
|
+
cusip: string | null;
|
|
40
|
+
eventDate: string | null;
|
|
41
|
+
filingDate: string;
|
|
42
|
+
accessionNumber: string;
|
|
43
|
+
filingUrl: string;
|
|
44
|
+
/** The same filer's percentage in its report before this one. */
|
|
45
|
+
previousPercent?: number | null;
|
|
46
|
+
previousFilingDate?: string | null;
|
|
47
|
+
status?: BeneficialOwnerStatus;
|
|
48
|
+
/**
|
|
49
|
+
* Only with `owners`: a filing the route could not read may be this filer's
|
|
50
|
+
* newer report or its real previous one, so the row and its change may be off.
|
|
51
|
+
*/
|
|
52
|
+
provisional?: boolean;
|
|
53
|
+
/** `text` and `index` reports could not be read in full; their missing numbers stay null. */
|
|
54
|
+
source: "xml" | "text" | "index";
|
|
55
|
+
reportingPersons: BeneficialOwnerReportingPerson[];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface BeneficialOwnersCoverage {
|
|
59
|
+
from: string | null;
|
|
60
|
+
/** Reports listed for the issuer in the window. */
|
|
61
|
+
filings: number;
|
|
62
|
+
/** Reports whose cover page was read. */
|
|
63
|
+
parsed: number;
|
|
64
|
+
/** Reports known only from the EDGAR index: listed, with their figures missing. */
|
|
65
|
+
unparsed: number;
|
|
66
|
+
/** Reports that could not be read this time and are left out until a later request. */
|
|
67
|
+
unavailable?: number;
|
|
68
|
+
/** Every report in the window was read; when false the owners are provisional. */
|
|
69
|
+
complete?: boolean;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface BeneficialOwnersPayload {
|
|
73
|
+
ticker: string;
|
|
74
|
+
cik: string;
|
|
75
|
+
companyName: string;
|
|
76
|
+
/** When the server assembled the list, an ISO time. */
|
|
77
|
+
asOf: string | null;
|
|
78
|
+
owners: BeneficialOwnerFiling[];
|
|
79
|
+
/** Only when the request asked for the history. Newest first. */
|
|
80
|
+
filings?: BeneficialOwnerFiling[];
|
|
81
|
+
hasMore: boolean;
|
|
82
|
+
nextOffset: number | null;
|
|
83
|
+
coverage: BeneficialOwnersCoverage | null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface CloudBeneficialOwnersParams {
|
|
87
|
+
ticker: string;
|
|
88
|
+
form?: BeneficialOwnersForm;
|
|
89
|
+
history?: boolean;
|
|
90
|
+
limit?: number;
|
|
91
|
+
offset?: number;
|
|
92
|
+
}
|
package/src/api-client/data.ts
CHANGED
|
@@ -30,6 +30,7 @@ import type { MoneyMarketsPayload } from "./money-markets";
|
|
|
30
30
|
import type { CloudCurveId, CloudCurveView, CloudWorldCurves } from "./yield-curves";
|
|
31
31
|
import type { CdxBoardPayload, CloudCreditBoardParams, SovrBoardPayload } from "./credit-boards";
|
|
32
32
|
import type { ShortVolumePayload, ShortVolumeScope } from "./short-volume";
|
|
33
|
+
import type { BeneficialOwnersPayload, CloudBeneficialOwnersParams } from "./beneficial-owners";
|
|
33
34
|
import type { SocialMentionDayPosts, SocialMentionsPayload, SocialMentionsRange } from "./social-mentions";
|
|
34
35
|
import type { FuturesCurveAsOfPayload, FuturesCurvePayload } from "./futures-curve";
|
|
35
36
|
import type { CotBoardPayload, CotContractPayload, CotFamily, CotClass } from "./cot";
|
|
@@ -37,6 +38,7 @@ import type { DoeBoardPayload } from "./doe";
|
|
|
37
38
|
import type { GpuBoardPayload, GpuEventsPayload, GpuHistoryPayload, GpuHistoryQuery } from "./gpu";
|
|
38
39
|
import type { CpiBoardPayload } from "./cpi";
|
|
39
40
|
import type { TapeSnapshot } from "./tape";
|
|
41
|
+
import { signalWithTimeout } from "../utils/async-deadline";
|
|
40
42
|
import type { ExchangeRateSnapshot } from "../types/exchange-rate";
|
|
41
43
|
import type { RatePathPayload } from "./rates";
|
|
42
44
|
import type { EarningsCalendarPayload, EarningsCalendarQuery, EarningsHistoryPayload } from "./earnings";
|
|
@@ -70,6 +72,7 @@ import {
|
|
|
70
72
|
cloudProxyStatementsPath,
|
|
71
73
|
cloudExchangeRatePath,
|
|
72
74
|
cloudSec13FPath,
|
|
75
|
+
cloudSecBeneficialOwnersPath,
|
|
73
76
|
cloudSecFilingContentPath,
|
|
74
77
|
cloudSecFilingDocumentsPath,
|
|
75
78
|
cloudSecFilingsPath,
|
|
@@ -181,6 +184,18 @@ export class CloudDataApi {
|
|
|
181
184
|
return this.request<T>(`/cloud/equity-screener/${path}`, init);
|
|
182
185
|
}
|
|
183
186
|
|
|
187
|
+
getMemberFunds() {
|
|
188
|
+
return this.request<import("./members").MemberFundsPayload>("/cloud/members");
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
getFundMembers(fund: string) {
|
|
192
|
+
return this.request<import("./members").FundMembersPayload>(`/cloud/members/${encodeURIComponent(fund)}`);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
getFundChanges(fund: string) {
|
|
196
|
+
return this.request<import("./members").FundChangesPayload>(`/cloud/members/${encodeURIComponent(fund)}/changes`);
|
|
197
|
+
}
|
|
198
|
+
|
|
184
199
|
getCloudThemes() {
|
|
185
200
|
return this.request<import("./themes").ThemesPayload>("/cloud/themes");
|
|
186
201
|
}
|
|
@@ -220,8 +235,8 @@ export class CloudDataApi {
|
|
|
220
235
|
return this.request<EarningsCalendarPayload>(`/cloud/earnings/calendar?${params}`, { signal: AbortSignal.timeout(30_000) });
|
|
221
236
|
}
|
|
222
237
|
|
|
223
|
-
async getCloudEarningsHistory(symbol: string): Promise<EarningsHistoryPayload> {
|
|
224
|
-
const params = new URLSearchParams({ symbol, limit:
|
|
238
|
+
async getCloudEarningsHistory(symbol: string, limit = 13): Promise<EarningsHistoryPayload> {
|
|
239
|
+
const params = new URLSearchParams({ symbol, limit: String(limit) });
|
|
225
240
|
return this.request<EarningsHistoryPayload>(`/cloud/earnings/history?${params}`, { signal: AbortSignal.timeout(30_000) });
|
|
226
241
|
}
|
|
227
242
|
|
|
@@ -422,6 +437,11 @@ export class CloudDataApi {
|
|
|
422
437
|
return this.request<CotContractPayload>(`/cloud/cot/contracts/${encodeURIComponent(code)}?${new URLSearchParams({ report })}`);
|
|
423
438
|
}
|
|
424
439
|
|
|
440
|
+
/** Geo layers (the map's layers, entities and series); one prefix-scoped method, like EQS. */
|
|
441
|
+
geo<T>(path: string, init?: RequestInit): Promise<T> {
|
|
442
|
+
return this.request<T>(`/cloud/geo/${path}`, init);
|
|
443
|
+
}
|
|
444
|
+
|
|
425
445
|
/** Credit-document paths stay with their pane; keep the shared client small. */
|
|
426
446
|
creditDocuments<T>(path: string): Promise<T> {
|
|
427
447
|
return this.request<T>(`/cloud/credit-documents/${path}`);
|
|
@@ -478,7 +498,10 @@ export class CloudDataApi {
|
|
|
478
498
|
}
|
|
479
499
|
async getCloudPerpsRankings(): Promise<PerpRankingsPayload> { return this.request("/cloud/perps/rankings"); }
|
|
480
500
|
async getCloudPerpsCompare(baseAsset: string): Promise<PerpBoardPayload> { return this.request(`/cloud/perps/compare?${new URLSearchParams({ baseAsset })}`); }
|
|
481
|
-
async getCloudPerpsEquity(symbol: string): Promise<PerpBoardPayload> {
|
|
501
|
+
async getCloudPerpsEquity(symbol: string, exchange?: string): Promise<PerpBoardPayload> {
|
|
502
|
+
const query = exchange === undefined ? "" : `?${new URLSearchParams({ identity: "listing", exchange })}`;
|
|
503
|
+
return this.request(`/cloud/perps/equity/${encodeURIComponent(symbol)}${query}`);
|
|
504
|
+
}
|
|
482
505
|
async getCloudPerpsMarket(marketId: string): Promise<PerpMarketPayload> { return this.request(`/cloud/perps/market?${new URLSearchParams({ marketId })}`); }
|
|
483
506
|
|
|
484
507
|
async analyzeCloudExposure(request: ExposureRequest): Promise<ExposurePayload> {
|
|
@@ -557,7 +580,7 @@ export class CloudDataApi {
|
|
|
557
580
|
}
|
|
558
581
|
|
|
559
582
|
async getCloudTape(symbol: string, exchange: string, signal?: AbortSignal): Promise<TapeSnapshot> {
|
|
560
|
-
return this.request<TapeSnapshot>(`/cloud/tape/${encodeURIComponent(symbol)}?exchange=${encodeURIComponent(exchange)}`, { signal: signal
|
|
583
|
+
return this.request<TapeSnapshot>(`/cloud/tape/${encodeURIComponent(symbol)}?exchange=${encodeURIComponent(exchange)}`, { signal: signalWithTimeout(signal, 30_000) });
|
|
561
584
|
}
|
|
562
585
|
|
|
563
586
|
async getCloudYieldCurve(): Promise<CloudYieldPointPayload[]> {
|
|
@@ -613,29 +636,29 @@ export class CloudDataApi {
|
|
|
613
636
|
}
|
|
614
637
|
const text = query.toString();
|
|
615
638
|
const suffix = text ? `?${text}` : "";
|
|
616
|
-
return this.request<MnaDealsPayload>(`/cloud/mna/deals${suffix}`, { signal: options?.signal
|
|
639
|
+
return this.request<MnaDealsPayload>(`/cloud/mna/deals${suffix}`, { signal: signalWithTimeout(options?.signal, 30_000) });
|
|
617
640
|
}
|
|
618
641
|
|
|
619
642
|
async getCloudMnaDeal(id: string, options?: { signal?: AbortSignal }): Promise<MnaDealPayload> {
|
|
620
|
-
return this.request<MnaDealPayload>(`/cloud/mna/deals/${encodeURIComponent(id)}`, { signal: options?.signal
|
|
643
|
+
return this.request<MnaDealPayload>(`/cloud/mna/deals/${encodeURIComponent(id)}`, { signal: signalWithTimeout(options?.signal, 30_000) });
|
|
621
644
|
}
|
|
622
645
|
|
|
623
646
|
// Public records about companies in difficulty. The answers are unchecked
|
|
624
647
|
// JSON: the distress tab's parsers validate them before anything is drawn.
|
|
625
648
|
async getPublicDistressFilings(params: DistressFilingsParams, options?: { signal?: AbortSignal }): Promise<unknown> {
|
|
626
|
-
return this.request<unknown>(`/public/events${distressQuery(params)}`, { signal: options?.signal
|
|
649
|
+
return this.request<unknown>(`/public/events${distressQuery(params)}`, { signal: signalWithTimeout(options?.signal, 30_000) });
|
|
627
650
|
}
|
|
628
651
|
|
|
629
652
|
async getPublicGoingConcern(params: GoingConcernParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
|
|
630
|
-
return this.request<unknown>(`/public/going-concern${distressQuery(params)}`, { signal: options?.signal
|
|
653
|
+
return this.request<unknown>(`/public/going-concern${distressQuery(params)}`, { signal: signalWithTimeout(options?.signal, 30_000) });
|
|
631
654
|
}
|
|
632
655
|
|
|
633
656
|
async getPublicDistressDesignations(params: DistressDesignationsParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
|
|
634
|
-
return this.request<unknown>(`/public/distress-designations${distressQuery(params)}`, { signal: options?.signal
|
|
657
|
+
return this.request<unknown>(`/public/distress-designations${distressQuery(params)}`, { signal: signalWithTimeout(options?.signal, 30_000) });
|
|
635
658
|
}
|
|
636
659
|
|
|
637
660
|
async getPublicInsolvencyNotices(params: InsolvencyNoticesParams = {}, options?: { signal?: AbortSignal }): Promise<unknown> {
|
|
638
|
-
return this.request<unknown>(`/public/insolvency-notices${distressQuery(params)}`, { signal: options?.signal
|
|
661
|
+
return this.request<unknown>(`/public/insolvency-notices${distressQuery(params)}`, { signal: signalWithTimeout(options?.signal, 30_000) });
|
|
639
662
|
}
|
|
640
663
|
|
|
641
664
|
async getCloudIpoCalendar(params: IpoCalendarParams = {}, options?: { signal?: AbortSignal }): Promise<IpoCalendarPayload> {
|
|
@@ -645,7 +668,7 @@ export class CloudDataApi {
|
|
|
645
668
|
}
|
|
646
669
|
const text = query.toString();
|
|
647
670
|
const suffix = text ? `?${text}` : "";
|
|
648
|
-
return this.request<IpoCalendarPayload>(`/cloud/ipo/calendar${suffix}`, { signal: options?.signal
|
|
671
|
+
return this.request<IpoCalendarPayload>(`/cloud/ipo/calendar${suffix}`, { signal: signalWithTimeout(options?.signal, 30_000) });
|
|
649
672
|
}
|
|
650
673
|
|
|
651
674
|
async getCloudShortVolume(symbol: string, scope: ShortVolumeScope = "nms"): Promise<ShortVolumePayload> {
|
|
@@ -780,6 +803,16 @@ export class CloudDataApi {
|
|
|
780
803
|
return this.request<CloudSecFilingsResponse>(cloudSecFilingsPath(params));
|
|
781
804
|
}
|
|
782
805
|
|
|
806
|
+
/** Schedule 13D/13G reports about an issuer. Unknown tickers answer 404; no reports is an empty `owners`. */
|
|
807
|
+
async getCloudSecBeneficialOwners(
|
|
808
|
+
params: CloudBeneficialOwnersParams,
|
|
809
|
+
options?: { signal?: AbortSignal },
|
|
810
|
+
): Promise<BeneficialOwnersPayload> {
|
|
811
|
+
return this.request<BeneficialOwnersPayload>(cloudSecBeneficialOwnersPath(params), {
|
|
812
|
+
signal: options?.signal,
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
|
|
783
816
|
async getCloudSecFilingDocuments(
|
|
784
817
|
params: CloudSecFilingParams,
|
|
785
818
|
): Promise<CloudSecDocumentsResponse> {
|
package/src/api-client/errors.ts
CHANGED
|
@@ -12,6 +12,8 @@ export class ApiRequestError extends Error {
|
|
|
12
12
|
readonly retryAfterMs?: number,
|
|
13
13
|
/** The body's `error` field, e.g. a broker route's "unsupported" or "tool_error". */
|
|
14
14
|
readonly code?: string,
|
|
15
|
+
/** The rest of a JSON error body, for a route that says more, e.g. which user refused a chat. */
|
|
16
|
+
readonly details?: Readonly<Record<string, unknown>>,
|
|
15
17
|
) {
|
|
16
18
|
super(message);
|
|
17
19
|
this.name = "ApiRequestError";
|
|
@@ -79,6 +81,16 @@ export function parseApiErrorMessage(body: string): string {
|
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
83
|
|
|
84
|
+
/** A JSON error body as an object, or undefined for any other body. */
|
|
85
|
+
export function parseApiErrorDetails(body: string): Readonly<Record<string, unknown>> | undefined {
|
|
86
|
+
try {
|
|
87
|
+
const parsed = JSON.parse(body) as unknown;
|
|
88
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed as Record<string, unknown> : undefined;
|
|
89
|
+
} catch {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
82
94
|
/** The JSON body's `error` field, which routes that name their failures set to a code. */
|
|
83
95
|
export function parseApiErrorCode(body: string): string | undefined {
|
|
84
96
|
try {
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geo layers, as GET /cloud/geo/* serves them: anything with a place (a ship,
|
|
3
|
+
* a port, a pipeline) as map features, an entity table and chart series. The
|
|
4
|
+
* types mirror the server's wire contract field for field. The app knows only
|
|
5
|
+
* this contract, so a layer the server adds needs no release.
|
|
6
|
+
*
|
|
7
|
+
* Failures carry `{ error, message }`: 404 `not_found`, 400 `invalid_bbox`,
|
|
8
|
+
* 403 `pro_required`, 429 `geo_rate_limited` with Retry-After, 503
|
|
9
|
+
* `geo_unavailable`. A layer that cannot serve still answers 200 with an
|
|
10
|
+
* empty body and its `status` and `statusNote`.
|
|
11
|
+
*/
|
|
12
|
+
type Lon = number;
|
|
13
|
+
type Lat = number;
|
|
14
|
+
|
|
15
|
+
type GeoGeometry =
|
|
16
|
+
| { type: "Point"; coordinates: [Lon, Lat] }
|
|
17
|
+
| { type: "LineString"; coordinates: [Lon, Lat][] }
|
|
18
|
+
| { type: "MultiLineString"; coordinates: [Lon, Lat][][] }
|
|
19
|
+
| { type: "Polygon"; coordinates: [Lon, Lat][][] };
|
|
20
|
+
|
|
21
|
+
export interface GeoTickerLink {
|
|
22
|
+
symbol: string;
|
|
23
|
+
exchange?: string;
|
|
24
|
+
/** How the entity relates to the company. */
|
|
25
|
+
via: "owner" | "operator" | "route" | "sector";
|
|
26
|
+
confidence: "reviewed" | "inferred";
|
|
27
|
+
/** Short, e.g. "Operates the pipeline". */
|
|
28
|
+
note?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type GeoPropValue = string | number | boolean | null;
|
|
32
|
+
|
|
33
|
+
export interface GeoFeature {
|
|
34
|
+
/** Stable within the layer, e.g. "mmsi:123456789", "iata:JFK", "choke:suez". */
|
|
35
|
+
id: string;
|
|
36
|
+
layer: string;
|
|
37
|
+
entityKind: string;
|
|
38
|
+
label: string;
|
|
39
|
+
geometry: GeoGeometry;
|
|
40
|
+
/** ISO time of the observation; null for static layers. */
|
|
41
|
+
ts: string | null;
|
|
42
|
+
/** Flat, display-ready values. */
|
|
43
|
+
props: Record<string, GeoPropValue>;
|
|
44
|
+
tickers?: GeoTickerLink[];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** `percent1` values are percentage points: 12.3 reads 12.3%. */
|
|
48
|
+
export type GeoColumnFormat = "text" | "int" | "decimal1" | "percent1" | "datetime" | "knots" | "km";
|
|
49
|
+
|
|
50
|
+
export interface GeoColumn {
|
|
51
|
+
key: string;
|
|
52
|
+
label: string;
|
|
53
|
+
align?: "left" | "right";
|
|
54
|
+
format?: GeoColumnFormat;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface GeoSeriesInfo {
|
|
58
|
+
id: string;
|
|
59
|
+
name: string;
|
|
60
|
+
unit: string;
|
|
61
|
+
frequency: "daily" | "weekly" | "monthly";
|
|
62
|
+
entityId?: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
type GeoLayerGroup = "ships" | "air" | "energy" | "ports" | "infrastructure";
|
|
66
|
+
type GeoLayerStatus = "ok" | "partial" | "unavailable";
|
|
67
|
+
|
|
68
|
+
export interface GeoLayerInfo {
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
/** A group the app does not know yet still lists, under its own name. */
|
|
72
|
+
group: GeoLayerGroup | (string & {});
|
|
73
|
+
geometry: "point" | "line" | "area";
|
|
74
|
+
cadence: "live" | "daily" | "static";
|
|
75
|
+
/** How often a client should re-request features; null for static layers. */
|
|
76
|
+
refreshSeconds: number | null;
|
|
77
|
+
asOf: string | null;
|
|
78
|
+
count: number | null;
|
|
79
|
+
status: GeoLayerStatus;
|
|
80
|
+
/** Short plain words, never a source name. */
|
|
81
|
+
statusNote?: string;
|
|
82
|
+
access: "free" | "pro";
|
|
83
|
+
/** The entity table's columns; the first is the label. */
|
|
84
|
+
columns: GeoColumn[];
|
|
85
|
+
series: GeoSeriesInfo[];
|
|
86
|
+
defaultVisible: boolean;
|
|
87
|
+
/** Below this zoom the client requests nothing. */
|
|
88
|
+
minZoom?: number;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface GeoLayersPayload {
|
|
92
|
+
layers: GeoLayerInfo[];
|
|
93
|
+
asOf: string | null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface GeoCluster {
|
|
97
|
+
id: string;
|
|
98
|
+
lon: Lon;
|
|
99
|
+
lat: Lat;
|
|
100
|
+
count: number;
|
|
101
|
+
kinds?: Record<string, number>;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* A clustering answer has no features: everything is in `clusters`. Closer
|
|
106
|
+
* in, a capped answer keeps the top features by rank and sets `truncated`.
|
|
107
|
+
*/
|
|
108
|
+
export interface GeoFeaturesPayload {
|
|
109
|
+
layer: string;
|
|
110
|
+
asOf: string | null;
|
|
111
|
+
features: GeoFeature[];
|
|
112
|
+
total: number;
|
|
113
|
+
truncated: boolean;
|
|
114
|
+
clusters?: GeoCluster[];
|
|
115
|
+
/** Present when the layer cannot serve right now, with the same words as the catalog. */
|
|
116
|
+
status?: GeoLayerStatus;
|
|
117
|
+
statusNote?: string;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export interface GeoEntityRow {
|
|
121
|
+
id: string;
|
|
122
|
+
label: string;
|
|
123
|
+
lon: Lon;
|
|
124
|
+
lat: Lat;
|
|
125
|
+
props: Record<string, GeoPropValue>;
|
|
126
|
+
tickers?: GeoTickerLink[];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export interface GeoEntitiesPayload {
|
|
130
|
+
layer: string;
|
|
131
|
+
asOf: string | null;
|
|
132
|
+
columns: GeoColumn[];
|
|
133
|
+
rows: GeoEntityRow[];
|
|
134
|
+
total: number;
|
|
135
|
+
status?: GeoLayerStatus;
|
|
136
|
+
statusNote?: string;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** Longitude, latitude and the ISO time the entity was seen there. */
|
|
140
|
+
type GeoTrailPoint = [Lon, Lat, string];
|
|
141
|
+
|
|
142
|
+
export interface GeoEntityPayload {
|
|
143
|
+
feature: GeoFeature;
|
|
144
|
+
detail: Record<string, GeoPropValue>;
|
|
145
|
+
/** Oldest first. */
|
|
146
|
+
trail?: GeoTrailPoint[];
|
|
147
|
+
series?: GeoSeriesInfo[];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** `alias` is the short form G takes (SUEZ, HORMUZ.TANKER); ids are the server's own. */
|
|
151
|
+
export type GeoSeriesSearchHit = GeoSeriesInfo & { layer: string; alias?: string };
|
|
152
|
+
|
|
153
|
+
export interface GeoSeriesSearchPayload {
|
|
154
|
+
series: GeoSeriesSearchHit[];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export interface GeoSeriesPayload {
|
|
158
|
+
id: string;
|
|
159
|
+
name: string;
|
|
160
|
+
unit: string;
|
|
161
|
+
frequency: GeoSeriesInfo["frequency"];
|
|
162
|
+
/** [YYYY-MM-DD, value], oldest first. */
|
|
163
|
+
points: [string, number][];
|
|
164
|
+
asOf: string | null;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** West, south, east, north in degrees. */
|
|
168
|
+
export type GeoBbox = [number, number, number, number];
|
|
169
|
+
|
|
170
|
+
/** A request under /cloud/geo/, through the shared Cloud client (`apiClient.geo`). */
|
|
171
|
+
export type GeoRequest = <T>(path: string, init?: RequestInit) => Promise<T>;
|
|
172
|
+
|
|
173
|
+
/** The server's default cap on one features answer; above it a point layer answers clusters. */
|
|
174
|
+
export const GEO_FEATURE_LIMIT = 1500;
|
|
175
|
+
const GEO_FEATURE_LIMIT_MAX = 5000;
|
|
176
|
+
/** Live layers a client may keep refreshing at once. */
|
|
177
|
+
export const GEO_MAX_LIVE_LAYERS = 2;
|
|
178
|
+
const CATALOG_TTL_MS = 5 * 60_000;
|
|
179
|
+
/** A server without geo layers is asked again only after this long. */
|
|
180
|
+
const ABSENT_TTL_MS = 10 * 60_000;
|
|
181
|
+
|
|
182
|
+
function query(params: Record<string, string | number | undefined | null>): string {
|
|
183
|
+
const search = new URLSearchParams();
|
|
184
|
+
for (const [key, value] of Object.entries(params)) {
|
|
185
|
+
if (value === undefined || value === null || value === "") continue;
|
|
186
|
+
search.set(key, String(value));
|
|
187
|
+
}
|
|
188
|
+
// Commas stay literal (bbox=w,s,e,n), as the contract writes them and caches key them.
|
|
189
|
+
const text = search.toString().replaceAll("%2C", ",");
|
|
190
|
+
return text ? `?${text}` : "";
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function segment(value: string): string {
|
|
194
|
+
return encodeURIComponent(value);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function bboxParam(bbox: GeoBbox | undefined): string | undefined {
|
|
198
|
+
return bbox ? bbox.map((value) => Number(value.toFixed(3))).join(",") : undefined;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export interface GeoFeaturesQuery {
|
|
202
|
+
bbox?: GeoBbox;
|
|
203
|
+
zoom?: number;
|
|
204
|
+
limit?: number;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export function getGeoFeatures(
|
|
208
|
+
request: GeoRequest,
|
|
209
|
+
layerId: string,
|
|
210
|
+
options: GeoFeaturesQuery = {},
|
|
211
|
+
signal?: AbortSignal,
|
|
212
|
+
): Promise<GeoFeaturesPayload> {
|
|
213
|
+
const limit = Math.max(1, Math.min(options.limit ?? GEO_FEATURE_LIMIT, GEO_FEATURE_LIMIT_MAX));
|
|
214
|
+
return request<GeoFeaturesPayload>(
|
|
215
|
+
`layers/${segment(layerId)}/features${query({ bbox: bboxParam(options.bbox), zoom: options.zoom, limit })}`,
|
|
216
|
+
signal ? { signal } : undefined,
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export interface GeoEntitiesQuery {
|
|
221
|
+
q?: string;
|
|
222
|
+
sort?: string;
|
|
223
|
+
dir?: "asc" | "desc";
|
|
224
|
+
limit?: number;
|
|
225
|
+
offset?: number;
|
|
226
|
+
bbox?: GeoBbox;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export function getGeoEntities(
|
|
230
|
+
request: GeoRequest,
|
|
231
|
+
layerId: string,
|
|
232
|
+
options: GeoEntitiesQuery = {},
|
|
233
|
+
signal?: AbortSignal,
|
|
234
|
+
): Promise<GeoEntitiesPayload> {
|
|
235
|
+
return request<GeoEntitiesPayload>(
|
|
236
|
+
`layers/${segment(layerId)}/entities${query({
|
|
237
|
+
q: options.q?.trim(),
|
|
238
|
+
sort: options.sort,
|
|
239
|
+
dir: options.sort ? options.dir : undefined,
|
|
240
|
+
limit: options.limit,
|
|
241
|
+
offset: options.offset,
|
|
242
|
+
bbox: bboxParam(options.bbox),
|
|
243
|
+
})}`,
|
|
244
|
+
signal ? { signal } : undefined,
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export function getGeoEntity(
|
|
249
|
+
request: GeoRequest,
|
|
250
|
+
layerId: string,
|
|
251
|
+
entityId: string,
|
|
252
|
+
signal?: AbortSignal,
|
|
253
|
+
): Promise<GeoEntityPayload> {
|
|
254
|
+
return request<GeoEntityPayload>(`entities/${segment(layerId)}/${segment(entityId)}`, signal ? { signal } : undefined);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export function searchGeoSeries(request: GeoRequest, q: string, signal?: AbortSignal): Promise<GeoSeriesSearchPayload> {
|
|
258
|
+
return request<GeoSeriesSearchPayload>(`series${query({ q: q.trim() })}`, signal ? { signal } : undefined);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export function getGeoSeries(
|
|
262
|
+
request: GeoRequest,
|
|
263
|
+
seriesId: string,
|
|
264
|
+
range: { from?: string; to?: string } = {},
|
|
265
|
+
signal?: AbortSignal,
|
|
266
|
+
): Promise<GeoSeriesPayload> {
|
|
267
|
+
return request<GeoSeriesPayload>(`series/${segment(seriesId)}${query(range)}`, signal ? { signal } : undefined);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Finds a series by id or short alias (SUEZ). Exact matches win over a series
|
|
272
|
+
* whose name merely contains the text.
|
|
273
|
+
*/
|
|
274
|
+
export async function resolveGeoSeries(
|
|
275
|
+
request: GeoRequest,
|
|
276
|
+
token: string,
|
|
277
|
+
signal?: AbortSignal,
|
|
278
|
+
): Promise<GeoSeriesSearchHit | null> {
|
|
279
|
+
const needle = token.trim().toLowerCase();
|
|
280
|
+
if (!needle) return null;
|
|
281
|
+
const { series } = await searchGeoSeries(request, token, signal);
|
|
282
|
+
return series.find((hit) => hit.id.toLowerCase() === needle)
|
|
283
|
+
?? series.find((hit) => hit.alias?.toLowerCase() === needle)
|
|
284
|
+
?? null;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
interface CatalogEntry {
|
|
288
|
+
at: number;
|
|
289
|
+
payload: GeoLayersPayload | null;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
let catalogEntry: CatalogEntry | null = null;
|
|
293
|
+
let catalogInFlight: Promise<GeoLayersPayload | null> | null = null;
|
|
294
|
+
|
|
295
|
+
function validLayer(value: unknown): value is GeoLayerInfo {
|
|
296
|
+
if (!value || typeof value !== "object") return false;
|
|
297
|
+
const layer = value as Partial<GeoLayerInfo>;
|
|
298
|
+
return typeof layer.id === "string" && !!layer.id && typeof layer.name === "string"
|
|
299
|
+
&& (layer.geometry === "point" || layer.geometry === "line" || layer.geometry === "area")
|
|
300
|
+
&& Array.isArray(layer.columns);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
function normalizeCatalog(payload: unknown): GeoLayersPayload | null {
|
|
304
|
+
if (!payload || typeof payload !== "object" || !Array.isArray((payload as GeoLayersPayload).layers)) return null;
|
|
305
|
+
const raw = payload as GeoLayersPayload;
|
|
306
|
+
const layers = raw.layers.filter(validLayer).map((layer) => ({
|
|
307
|
+
...layer,
|
|
308
|
+
series: Array.isArray(layer.series) ? layer.series : [],
|
|
309
|
+
refreshSeconds: typeof layer.refreshSeconds === "number" && layer.refreshSeconds > 0 ? layer.refreshSeconds : null,
|
|
310
|
+
}));
|
|
311
|
+
return layers.length ? { layers, asOf: raw.asOf ?? null } : null;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* The layer catalog, or null when this server has no geo layers. A 404, a
|
|
316
|
+
* failed request or an empty answer all read as "no layers", so the map stays
|
|
317
|
+
* the venue map it was, without errors. Answers are kept for a few minutes.
|
|
318
|
+
*/
|
|
319
|
+
export async function loadGeoCatalog(
|
|
320
|
+
request: GeoRequest,
|
|
321
|
+
options: { force?: boolean; signal?: AbortSignal; now?: number } = {},
|
|
322
|
+
): Promise<GeoLayersPayload | null> {
|
|
323
|
+
const now = options.now ?? Date.now();
|
|
324
|
+
if (!options.force && catalogEntry) {
|
|
325
|
+
const ttl = catalogEntry.payload ? CATALOG_TTL_MS : ABSENT_TTL_MS;
|
|
326
|
+
if (now - catalogEntry.at < ttl) return catalogEntry.payload;
|
|
327
|
+
}
|
|
328
|
+
if (!catalogInFlight) {
|
|
329
|
+
catalogInFlight = request<unknown>("layers")
|
|
330
|
+
.then(normalizeCatalog)
|
|
331
|
+
// A missing route or a refusal is an answer; a network blip is too, for a while.
|
|
332
|
+
.catch(() => null)
|
|
333
|
+
.then((payload) => {
|
|
334
|
+
catalogEntry = { at: options.now ?? Date.now(), payload };
|
|
335
|
+
return payload;
|
|
336
|
+
})
|
|
337
|
+
.finally(() => {
|
|
338
|
+
catalogInFlight = null;
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
const pending = catalogInFlight;
|
|
342
|
+
if (!options.signal) return pending;
|
|
343
|
+
return new Promise((resolve, reject) => {
|
|
344
|
+
const abort = () => reject(options.signal!.reason ?? new DOMException("Aborted", "AbortError"));
|
|
345
|
+
if (options.signal!.aborted) return abort();
|
|
346
|
+
options.signal!.addEventListener("abort", abort, { once: true });
|
|
347
|
+
void pending.then((value) => {
|
|
348
|
+
options.signal!.removeEventListener("abort", abort);
|
|
349
|
+
resolve(value);
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/** The last catalog answer without asking the server, for synchronous readers such as pane settings. */
|
|
355
|
+
export function peekGeoCatalog(): GeoLayersPayload | null {
|
|
356
|
+
return catalogEntry?.payload ?? null;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/** Test seam: forget what the server answered. */
|
|
360
|
+
export function resetGeoCatalogCache(): void {
|
|
361
|
+
catalogEntry = null;
|
|
362
|
+
catalogInFlight = null;
|
|
363
|
+
}
|
package/src/api-client/index.ts
CHANGED
|
@@ -742,6 +742,9 @@ class GloomApiClient {
|
|
|
742
742
|
getCloudEstimateRevisions = this.data.getCloudEstimateRevisions.bind(this.data);
|
|
743
743
|
getCloudMoneyMarkets = this.data.getCloudMoneyMarkets.bind(this.data);
|
|
744
744
|
equityScreener = this.data.equityScreener.bind(this.data);
|
|
745
|
+
getMemberFunds = this.data.getMemberFunds.bind(this.data);
|
|
746
|
+
getFundMembers = this.data.getFundMembers.bind(this.data);
|
|
747
|
+
getFundChanges = this.data.getFundChanges.bind(this.data);
|
|
745
748
|
getCloudThemes = this.data.getCloudThemes.bind(this.data);
|
|
746
749
|
getCloudThemeMembers = this.data.getCloudThemeMembers.bind(this.data);
|
|
747
750
|
impliedVolatility = this.data.impliedVolatility.bind(this.data);
|
|
@@ -765,6 +768,7 @@ class GloomApiClient {
|
|
|
765
768
|
getCloudCotBoard = this.data.getCloudCotBoard.bind(this.data);
|
|
766
769
|
getCloudCotContract = this.data.getCloudCotContract.bind(this.data);
|
|
767
770
|
creditDocuments = this.data.creditDocuments.bind(this.data);
|
|
771
|
+
geo = this.data.geo.bind(this.data);
|
|
768
772
|
getCloudHiring = this.data.getCloudHiring.bind(this.data);
|
|
769
773
|
getCloudAppRankHistory = this.data.getCloudAppRankHistory.bind(this.data);
|
|
770
774
|
getCloudAppAttention = this.data.getCloudAppAttention.bind(this.data);
|
|
@@ -816,6 +820,7 @@ class GloomApiClient {
|
|
|
816
820
|
getRiskReports = this.data.getRiskReports.bind(this.data);
|
|
817
821
|
getRiskReport = this.data.getRiskReport.bind(this.data);
|
|
818
822
|
getCloudSecFilings = this.data.getCloudSecFilings.bind(this.data);
|
|
823
|
+
getCloudSecBeneficialOwners = this.data.getCloudSecBeneficialOwners.bind(this.data);
|
|
819
824
|
getCloudSecFilingDocuments = this.data.getCloudSecFilingDocuments.bind(this.data);
|
|
820
825
|
getCloudSecFilingContent = this.data.getCloudSecFilingContent.bind(this.data);
|
|
821
826
|
getCloudSec13F = this.data.getCloudSec13F.bind(this.data);
|