gloomberb 0.16.4 → 0.16.6
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 +14 -91
- package/package.json +5 -1
- package/src/{plugins/builtin/cloud → account}/auth-form.tsx +9 -9
- package/src/{plugins/builtin/cloud → account}/auth-model.ts +4 -4
- package/src/account/billing.ts +57 -0
- package/src/{plugins/builtin/cloud → account}/device-signin-dialog.tsx +18 -12
- package/src/{plugins/builtin/cloud → account}/device-signin.ts +2 -2
- package/src/{plugins/builtin/cloud → account}/email-auth-attempt.ts +2 -2
- package/src/account/session.ts +16 -0
- package/src/{plugins/builtin/cloud → account}/upgrade-dialog.tsx +16 -15
- package/src/{plugins/builtin/cloud → account}/upgrade-personalization.ts +7 -7
- package/src/{plugins/builtin/cloud → account}/upgrade-tickers.ts +6 -6
- package/src/{plugins/builtin/cloud → account}/verification-panel.tsx +6 -6
- package/src/api-client/central-bank-rates.ts +6 -1
- package/src/api-client/chat.ts +26 -0
- package/src/api-client/credit-boards.ts +2 -0
- package/src/api-client/data.ts +73 -3
- package/src/api-client/earnings.ts +6 -0
- package/src/api-client/europe-energy.ts +106 -0
- package/src/api-client/futures-curve.ts +56 -0
- package/src/api-client/index.ts +13 -1
- package/src/api-client/market-discovery.ts +13 -1
- package/src/api-client/normalizers.ts +32 -0
- package/src/api-client/paths.ts +7 -0
- package/src/api-client/perps.ts +8 -0
- package/src/api-client/request.ts +9 -2
- package/src/api-client/research-activity.ts +15 -10
- package/src/api-client/socket.ts +29 -0
- package/src/api-client/themes.ts +22 -1
- package/src/api-client/types.ts +78 -2
- package/src/api-client/yield-curves.ts +8 -0
- package/src/app/global-shortcuts.ts +50 -2
- package/src/app/keybindings/actions.ts +12 -1
- package/src/app/pane-runtime/plugin-bindings.ts +2 -2
- package/src/app/pane-runtime/ticker-open-runtime.ts +16 -6
- package/src/app/runtime/desktop-deeplink.ts +10 -5
- package/src/app/runtime/startup.ts +1 -1
- package/src/app.tsx +6 -0
- package/src/architecture/core-builtin-allowlist.json +8 -26
- package/src/ask-gloom/pane-context.ts +114 -0
- package/src/ask-gloom/pane-request.ts +70 -0
- package/src/ask-gloom/pane-text.ts +201 -0
- package/src/brokers/signed-in/sign-in-dialog.tsx +11 -5
- package/src/capabilities/chart-series.ts +19 -2
- package/src/capabilities/factories.ts +1 -0
- package/src/cli/central-bank-events.ts +23 -0
- package/src/cli/command-options.ts +17 -5
- package/src/cli/commands/crypto-hints.ts +35 -2
- package/src/cli/commands/fred-series.ts +146 -0
- package/src/cli/commands/market.ts +501 -115
- package/src/cli/commands/news-hints.ts +62 -0
- package/src/cli/commands/news-search.ts +53 -0
- package/src/cli/commands/options-leaps.ts +5 -2
- package/src/cli/commands/overview.ts +132 -26
- package/src/cli/commands/remote.ts +2 -1
- package/src/cli/commands/search.ts +317 -13
- package/src/cli/commands/system.ts +55 -8
- package/src/cli/commands/ticker.ts +155 -18
- package/src/cli/context.ts +45 -14
- package/src/cli/desktop-pane-shot.ts +76 -7
- package/src/cli/earnings-calendar.ts +71 -0
- package/src/cli/errors.ts +7 -5
- package/src/cli/exit-codes.ts +8 -0
- package/src/cli/export-source.ts +58 -0
- package/src/cli/freshness.ts +18 -7
- package/src/cli/glossary.ts +483 -0
- package/src/cli/help.ts +10 -0
- package/src/cli/helpers.ts +2 -5
- package/src/cli/history-rows.ts +118 -7
- package/src/cli/index-roots.ts +7 -0
- package/src/cli/index.ts +29 -9
- package/src/cli/known-gaps.ts +84 -0
- package/src/cli/listing-arg.ts +551 -97
- package/src/cli/not-a-ticker.ts +24 -9
- package/src/cli/pane-functions/access-gate.ts +13 -2
- package/src/cli/pane-functions/capabilities.ts +4 -3
- package/src/cli/pane-functions/catalog.ts +214 -40
- package/src/cli/pane-functions/data.ts +42 -8
- package/src/cli/pane-functions/discovery.ts +1 -0
- package/src/cli/pane-functions/dom.ts +37 -8
- package/src/cli/pane-functions/freshness.ts +393 -49
- package/src/cli/pane-functions/function-help.ts +31 -15
- package/src/cli/pane-functions/headless.ts +98 -30
- package/src/cli/pane-functions/index.ts +101 -19
- package/src/cli/pane-functions/market-session.ts +22 -8
- package/src/cli/pane-functions/options.ts +71 -22
- package/src/cli/pane-functions/report-notices.ts +25 -7
- package/src/cli/pane-functions/report.ts +15 -8
- package/src/cli/pane-functions/resolver.ts +74 -19
- package/src/cli/pane-functions/screenshot.ts +250 -27
- package/src/cli/perpetual-contract.ts +60 -0
- package/src/cli/registry.ts +3 -1
- package/src/cli/report-tables.ts +26 -7
- package/src/cli/result.ts +45 -11
- package/src/cli/series-search.ts +111 -0
- package/src/cli/staged-tickers.ts +52 -0
- package/src/cli/symbol-args.ts +27 -0
- package/src/cli/symbol-list.ts +154 -0
- package/src/cli/symbol-rows.ts +154 -0
- package/src/cli/ticker-resolution.ts +311 -27
- package/src/cli/types.ts +5 -0
- package/src/components/chart/composite/axis-overlays.tsx +14 -3
- package/src/components/chart/composite/composite-chart.tsx +71 -11
- package/src/components/chart/composite/crosshair-readout.tsx +150 -0
- package/src/components/chart/composite/downsample.ts +1 -1
- package/src/components/chart/composite/format.ts +29 -0
- package/src/components/chart/composite/interactions.ts +9 -2
- package/src/components/chart/composite/legend.tsx +100 -33
- package/src/components/chart/composite/panel-bitmap.ts +70 -35
- package/src/components/chart/composite/panel-labels.ts +18 -17
- package/src/components/chart/composite/panel-series.ts +1 -0
- package/src/components/chart/composite/panel-surface.tsx +46 -21
- package/src/components/chart/composite/price-axis-labels.tsx +3 -1
- package/src/components/chart/composite/rasterizer.ts +50 -8
- package/src/components/chart/composite/scene.ts +2 -1
- package/src/components/chart/composite/time-scale.ts +26 -9
- package/src/components/chart/composite/types.ts +18 -0
- package/src/components/chart/composite/use-composite-viewport.ts +30 -2
- package/src/components/chart/native/raster/crosshair.ts +8 -3
- package/src/components/chart/native/raster/primitives.ts +85 -21
- package/src/components/chart/native/surface/manager.ts +33 -8
- package/src/components/chart/surface3d/chart.tsx +1 -1
- package/src/components/command-bar/action-runtime.ts +1 -1
- package/src/components/command-bar/commands/collection-list.ts +210 -0
- package/src/components/command-bar/commands/collection.ts +40 -1
- package/src/components/command-bar/commands/direct/index.ts +4 -0
- package/src/components/command-bar/commands/registry.ts +8 -0
- package/src/components/command-bar/panel/index.tsx +11 -3
- package/src/components/command-bar/panel/runtime.ts +3 -0
- package/src/components/command-bar/panel/types.ts +2 -0
- package/src/components/command-bar/routes/root/plugin-install.ts +4 -4
- package/src/components/command-bar/routes/root/provider-search.ts +4 -3
- package/src/components/command-bar/routes/ticker-search/results.ts +12 -11
- package/src/components/command-bar/routes/ticker-search/route.ts +4 -3
- package/src/components/command-bar/routing/actions.ts +1 -1
- package/src/components/command-bar/workflow/tickers.ts +42 -17
- package/src/components/layout/detached-pane-shell.tsx +68 -39
- package/src/components/layout/floating-pane.tsx +10 -1
- package/src/components/layout/header.tsx +25 -5
- package/src/components/layout/missing-pane.tsx +3 -3
- package/src/components/layout/pane/capture-stamp.ts +41 -0
- package/src/components/layout/pane/capture-status.ts +12 -0
- package/src/components/layout/pane/content.tsx +7 -13
- package/src/components/layout/pane/footer/index.tsx +6 -2
- package/src/components/layout/pane/footer/keyboard.ts +3 -0
- package/src/components/layout/pane/footer/model.ts +41 -1
- package/src/components/layout/pane/header.tsx +50 -1
- package/src/components/layout/pane/index.tsx +21 -3
- package/src/components/layout/pane/sidebar.tsx +88 -21
- package/src/components/layout/shell/active-drag.ts +21 -5
- package/src/components/layout/shell/cursor-occlusion.ts +2 -1
- package/src/components/layout/shell/drag/index.ts +39 -9
- package/src/components/layout/shell/drag/live.ts +61 -51
- package/src/components/layout/shell/drag/runtime.ts +54 -12
- package/src/components/layout/shell/index.tsx +84 -65
- package/src/components/layout/shell/menu.ts +14 -1
- package/src/components/layout/shell/native/pointer-runtime.ts +3 -1
- package/src/components/layout/shell/pane/actions.ts +32 -10
- package/src/components/layout/shell/pane/ask.ts +131 -0
- package/src/components/layout/shell/pane/capture.ts +162 -0
- package/src/components/layout/shell/pane/layers.tsx +218 -50
- package/src/components/layout/shell/pane/management-shortcuts.ts +46 -1
- package/src/components/layout/shell/shortcuts.ts +21 -4
- package/src/components/layout/shell/terminal-pointer-runtime.ts +24 -0
- package/src/components/markdown-text.tsx +62 -20
- package/src/components/metric-treemap/heat-surface.tsx +8 -1
- package/src/components/onboarding/account-step/form-panel.tsx +1 -1
- package/src/components/onboarding/account-step/index.tsx +1 -1
- package/src/components/onboarding/account-step/qr-panel.tsx +1 -1
- package/src/components/onboarding/account-step/signed-in-panel.tsx +1 -1
- package/src/components/onboarding/onboarding-keyboard.ts +1 -1
- package/src/components/onboarding/onboarding-wizard.tsx +2 -2
- package/src/components/onboarding/use-onboarding-upgrade.ts +3 -3
- package/src/components/onboarding/wizard-account.ts +2 -2
- package/src/components/pane-template-wizard.tsx +9 -1
- package/src/components/price-selector-dialog.tsx +11 -2
- package/src/components/reader/article-reader.tsx +642 -0
- package/src/components/reader/article-text.ts +527 -0
- package/src/components/sign-in-gate.tsx +3 -3
- package/src/components/ticker/list-table-view.tsx +43 -2
- package/src/components/ui/action-row.tsx +2 -1
- package/src/components/ui/button.tsx +7 -1
- package/src/components/ui/choice-dialog.tsx +6 -4
- package/src/components/ui/confirm-dialog.tsx +28 -18
- package/src/components/ui/data-table/index.tsx +18 -6
- package/src/components/ui/data-table/opentui/index.tsx +37 -6
- package/src/components/ui/data-table/types.ts +12 -0
- package/src/components/ui/dialog-actions.tsx +64 -0
- package/src/components/ui/display.tsx +17 -3
- package/src/components/ui/frame.tsx +35 -2
- package/src/components/ui/icon.tsx +6 -1
- package/src/components/ui/query-bar.tsx +10 -1
- package/src/components/ui/text-prompt-dialog.tsx +11 -9
- package/src/data/cached-query.ts +2 -0
- package/src/data/config/store/migrations.ts +7 -0
- package/src/data/config/store/normalize.ts +7 -2
- package/src/data/config/store/portfolio-as-of-column.ts +57 -0
- package/src/data/ticker-repository.ts +5 -0
- package/src/data/ticker-store.ts +15 -0
- package/src/docs/content.ts +215 -0
- package/src/docs/load.ts +139 -0
- package/src/docs/requests.ts +39 -0
- package/src/docs/snapshot.chunk.ts +8 -0
- package/src/docs/snapshot.json +7555 -0
- package/src/docs/topics.ts +216 -0
- package/src/i18n/es.ts +65 -5
- package/src/i18n/ja.ts +65 -5
- package/src/i18n/ko.ts +65 -5
- package/src/i18n/zh-cn.ts +65 -5
- package/src/i18n/zh-tw.ts +65 -5
- package/src/layout/desks.ts +1 -1
- package/src/layout/pane-manager/dock-tree.ts +18 -0
- package/src/layout/pane-manager/index.ts +1 -0
- package/src/layout-marketplace/gallery.tsx +1 -1
- package/src/market-data/coordinator/chart.ts +10 -4
- package/src/market-data/coordinator/index.ts +6 -3
- package/src/{plugins/builtin/futures/contracts.ts → market-data/futures-board.ts} +81 -28
- package/src/market-data/futures-contract.ts +151 -0
- package/src/market-data/hooks.tsx +10 -2
- package/src/market-data/market/format.ts +39 -21
- package/src/market-data/market/freshness.ts +84 -20
- package/src/market-data/market/session-close-note.ts +3 -2
- package/src/market-data/market/status.ts +19 -23
- package/src/market-data/published-apac-sessions.ts +23 -1
- package/src/market-data/quotes/contributions.ts +5 -0
- package/src/market-data/quotes/metadata.ts +19 -24
- package/src/market-data/quotes/resolution.ts +5 -0
- package/src/market-data/quotes/screener-live-quotes.ts +5 -4
- package/src/market-data/result-types.ts +2 -0
- package/src/notifications/app-notifier.ts +17 -1
- package/src/notifications/notification-log.ts +180 -0
- package/src/plugins/auto-update-node.ts +2 -2
- package/src/plugins/auto-update.ts +2 -2
- package/src/plugins/builtin/account-management/index.tsx +1 -0
- package/src/plugins/builtin/account-management/model.ts +1 -56
- package/src/plugins/builtin/account-management/pane.tsx +6 -4
- package/src/plugins/builtin/account-management/password-dialog.tsx +1 -1
- package/src/plugins/builtin/alerts/catalysts.ts +1 -1
- package/src/plugins/builtin/alerts/cli.ts +313 -47
- package/src/plugins/builtin/alerts/events-pane.tsx +45 -7
- package/src/plugins/builtin/alerts/events.ts +23 -2
- package/src/plugins/builtin/alerts/focus.ts +27 -0
- package/src/plugins/builtin/alerts/history-pane.tsx +7 -2
- package/src/plugins/builtin/alerts/history.ts +2 -0
- package/src/plugins/builtin/alerts/index.tsx +47 -11
- package/src/plugins/builtin/alerts/pane.tsx +27 -1
- package/src/plugins/builtin/alerts/research-builder.ts +8 -3
- package/src/plugins/builtin/alerts/research-rules.ts +18 -2
- package/src/plugins/builtin/alerts/scheduled-check.ts +122 -0
- package/src/plugins/builtin/alerts/scheduled-sources.ts +25 -0
- package/src/plugins/builtin/alerts/scheduled.ts +254 -0
- package/src/plugins/builtin/alerts/targets.ts +92 -0
- package/src/plugins/builtin/analytics/index.tsx +8 -3
- package/src/plugins/builtin/analytics/risk-headless.ts +60 -27
- package/src/plugins/builtin/analytics/risk-math.ts +91 -27
- package/src/plugins/builtin/analytics/risk-model.ts +35 -5
- package/src/plugins/builtin/analytics/risk-pane.tsx +15 -8
- package/src/plugins/builtin/attention/headless.ts +1 -1
- package/src/plugins/builtin/attention/index.tsx +2 -0
- package/src/plugins/builtin/attention/pane.tsx +3 -1
- package/src/plugins/builtin/attention/series.ts +26 -0
- package/src/plugins/builtin/awards/headless.ts +88 -18
- package/src/plugins/builtin/awards/index.tsx +2 -0
- package/src/plugins/builtin/awards/model.ts +41 -1
- package/src/plugins/builtin/awards/pane.tsx +22 -13
- package/src/plugins/builtin/awards/series.ts +29 -0
- package/src/plugins/builtin/backtest/headless.ts +2 -2
- package/src/plugins/builtin/bond-calculator/model.ts +2 -1
- package/src/plugins/builtin/broker-manager/index.tsx +1 -0
- package/src/plugins/builtin/catalysts/headless.ts +1 -1
- package/src/plugins/builtin/catalysts/pane.tsx +3 -1
- package/src/plugins/builtin/cds/client.ts +49 -12
- package/src/plugins/builtin/cds/headless.ts +119 -19
- package/src/plugins/builtin/cds/index.tsx +3 -1
- package/src/plugins/builtin/cds/model.ts +214 -32
- package/src/plugins/builtin/cds/pane.tsx +58 -14
- package/src/plugins/builtin/cds/series.ts +19 -0
- package/src/plugins/builtin/central-bank-rates/client.ts +4 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +46 -16
- package/src/plugins/builtin/central-bank-rates/index.tsx +3 -1
- package/src/plugins/builtin/central-bank-rates/model.ts +99 -0
- package/src/plugins/builtin/central-bank-rates/pane.tsx +1 -1
- package/src/plugins/builtin/central-bank-rates/series.ts +36 -0
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +193 -255
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +84 -46
- package/src/plugins/builtin/chart-composer/editor.tsx +5 -4
- package/src/plugins/builtin/chart-composer/field-series.ts +40 -0
- package/src/plugins/builtin/chart-composer/headless-schema.ts +1 -1
- package/src/plugins/builtin/chart-composer/headless.ts +70 -5
- package/src/plugins/builtin/chart-composer/index.tsx +15 -3
- package/src/plugins/builtin/chart-composer/pane.tsx +81 -38
- package/src/plugins/builtin/chart-composer/series-catalog.ts +58 -50
- package/src/plugins/builtin/chart-composer/series-expression.ts +18 -10
- package/src/plugins/builtin/chart-composer/use-series-catalog.ts +59 -3
- package/src/plugins/builtin/chart-composer/user-series.ts +84 -0
- package/src/plugins/builtin/chat/content/composer-runtime.ts +6 -1
- package/src/plugins/builtin/chat/content/composer.tsx +5 -1
- package/src/plugins/builtin/chat/content/footer.tsx +12 -0
- package/src/plugins/builtin/chat/content/index.tsx +89 -5
- package/src/plugins/builtin/chat/content/new-dm-dialog.tsx +10 -2
- package/src/plugins/builtin/chat/content/new-messages.tsx +89 -0
- package/src/plugins/builtin/chat/content/row-activity.ts +132 -0
- package/src/plugins/builtin/chat/content/scroll.ts +127 -27
- package/src/plugins/builtin/chat/content/shortcuts.ts +2 -2
- package/src/plugins/builtin/chat/content/transcript.tsx +145 -78
- package/src/plugins/builtin/chat/content/types.ts +1 -0
- package/src/plugins/builtin/chat/controller/fetch.ts +8 -2
- package/src/plugins/builtin/chat/controller/index.ts +123 -1
- package/src/plugins/builtin/chat/controller/message-loading.ts +3 -0
- package/src/plugins/builtin/chat/controller/messages.ts +7 -2
- package/src/plugins/builtin/chat/controller/realtime.ts +10 -1
- package/src/plugins/builtin/chat/controller/send.ts +61 -1
- package/src/plugins/builtin/chat/controller/state.ts +8 -0
- package/src/plugins/builtin/chat/ghost-user.ts +20 -0
- package/src/plugins/builtin/chat/index.tsx +23 -5
- package/src/plugins/builtin/chat/layout.ts +78 -5
- package/src/plugins/builtin/chat/message/ai-badge.tsx +18 -0
- package/src/plugins/builtin/chat/message/desktop.tsx +55 -6
- package/src/plugins/builtin/chat/message/header.tsx +16 -4
- package/src/plugins/builtin/chat/message/profile-popover.tsx +5 -1
- package/src/plugins/builtin/chat/message/reactions.tsx +210 -0
- package/src/plugins/builtin/chat/message/render-state.ts +18 -2
- package/src/plugins/builtin/chat/message/terminal.tsx +43 -4
- package/src/plugins/builtin/chat/message/types.ts +12 -0
- package/src/plugins/builtin/chat/reactions.ts +197 -0
- package/src/plugins/builtin/chat/share/flow.tsx +87 -0
- package/src/plugins/builtin/chat/share/targets.ts +27 -0
- package/src/plugins/builtin/chat/status-widget.tsx +6 -3
- package/src/plugins/builtin/chat/unread-inbox-pane.tsx +148 -27
- package/src/plugins/builtin/chat/unread-inbox.ts +22 -0
- package/src/plugins/builtin/cloud/askg/attached-pane.tsx +69 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +111 -19
- package/src/plugins/builtin/cloud/askg/executor.ts +57 -3
- package/src/plugins/builtin/cloud/askg/manifest.ts +32 -7
- package/src/plugins/builtin/cloud/askg/model.ts +27 -8
- package/src/plugins/builtin/cloud/askg/pane-attachment.ts +94 -0
- package/src/plugins/builtin/cloud/askg/pane.tsx +141 -12
- package/src/plugins/builtin/cloud/askg/pending-question.ts +11 -0
- package/src/plugins/builtin/cloud/askg/protocol.ts +10 -1
- package/src/plugins/builtin/cloud/askg/tool-display.ts +3 -0
- package/src/plugins/builtin/cloud/askg/undo.ts +2 -0
- package/src/plugins/builtin/cloud/auth-actions.tsx +1 -1
- package/src/plugins/builtin/cloud/auth-commands.ts +1 -1
- package/src/plugins/builtin/cloud/auth-dialog.tsx +3 -3
- package/src/plugins/builtin/cloud/company-picker.tsx +1 -1
- package/src/plugins/builtin/cloud/mcp-connect/dialog.tsx +3 -0
- package/src/plugins/builtin/cloud/plugin.tsx +19 -2
- package/src/plugins/builtin/cloud/team/model.ts +5 -0
- package/src/plugins/builtin/cloud/team/module.tsx +1 -0
- package/src/plugins/builtin/cloud/team/store.ts +8 -3
- package/src/plugins/builtin/cloud/terminal-relay/engine.ts +77 -9
- package/src/plugins/builtin/cloud/terminal-relay/manifest.ts +6 -1
- package/src/plugins/builtin/cloud/terminal-relay/policy.ts +9 -0
- package/src/plugins/builtin/cloud/terminal-relay/prompts.tsx +35 -11
- package/src/plugins/builtin/cloud/thesis/exposure.ts +1 -1
- package/src/plugins/builtin/cloud/thesis/module.tsx +1 -0
- package/src/plugins/builtin/cloud/thesis/prompts.tsx +2 -1
- package/src/plugins/builtin/company-attention/app-rank.tsx +1 -1
- package/src/plugins/builtin/company-attention/headless.ts +21 -7
- package/src/plugins/builtin/company-attention/index.tsx +2 -0
- package/src/plugins/builtin/company-attention/model.ts +26 -7
- package/src/plugins/builtin/company-attention/pane.tsx +12 -9
- package/src/plugins/builtin/company-attention/series.ts +52 -0
- package/src/plugins/builtin/company-kpis/headless.ts +97 -10
- package/src/plugins/builtin/company-kpis/model.ts +24 -2
- package/src/plugins/builtin/company-kpis/pane.tsx +17 -16
- package/src/plugins/builtin/composite-plugins.ts +19 -13
- package/src/plugins/builtin/connections/index.ts +1 -0
- package/src/plugins/builtin/cot/headless.ts +1 -1
- package/src/plugins/builtin/cot/index.tsx +3 -1
- package/src/plugins/builtin/cot/model.ts +40 -11
- package/src/plugins/builtin/cot/series.ts +27 -0
- package/src/plugins/builtin/cpi/headless.ts +3 -3
- package/src/plugins/builtin/credit-boards/cdx-pane.tsx +10 -1
- package/src/plugins/builtin/credit-boards/client.ts +6 -2
- package/src/plugins/builtin/credit-boards/headless.ts +108 -31
- package/src/plugins/builtin/credit-boards/index.tsx +2 -0
- package/src/plugins/builtin/credit-boards/model.ts +11 -1
- package/src/plugins/builtin/credit-boards/series.ts +66 -0
- package/src/plugins/builtin/credit-conditions/client.ts +12 -9
- package/src/plugins/builtin/credit-conditions/headless.ts +13 -2
- package/src/plugins/builtin/credit-conditions/index.tsx +18 -9
- package/src/plugins/builtin/credit-conditions/model.ts +19 -11
- package/src/plugins/builtin/credit-conditions/series.ts +16 -0
- package/src/plugins/builtin/credit-documents/headless.ts +33 -3
- package/src/plugins/builtin/credit-documents/pane.tsx +3 -1
- package/src/plugins/builtin/crypto-board/headless.ts +2 -3
- package/src/plugins/builtin/crypto-board/index.tsx +2 -0
- package/src/plugins/builtin/crypto-board/model.ts +12 -0
- package/src/plugins/builtin/crypto-board/pane.tsx +19 -12
- package/src/plugins/builtin/crypto-board/series.ts +48 -0
- package/src/plugins/builtin/custom-view/live-quotes.ts +2 -2
- package/src/plugins/builtin/debt-maturities/headless.ts +17 -11
- package/src/plugins/builtin/debt-maturities/index.tsx +2 -0
- package/src/plugins/builtin/debt-maturities/series.ts +45 -0
- package/src/plugins/builtin/dividend-yield/client.ts +3 -0
- package/src/plugins/builtin/dividend-yield/headless.ts +7 -4
- package/src/plugins/builtin/dividend-yield/index.tsx +3 -1
- package/src/plugins/builtin/dividend-yield/pane.tsx +3 -1
- package/src/plugins/builtin/dividend-yield/series.ts +20 -0
- package/src/plugins/builtin/dividend-yield/types.ts +2 -0
- package/src/plugins/builtin/docs/blocks.tsx +181 -0
- package/src/plugins/builtin/docs/index.tsx +68 -0
- package/src/plugins/builtin/docs/pane.tsx +426 -0
- package/src/plugins/builtin/docs/targets.ts +72 -0
- package/src/plugins/builtin/docs/use-docs.ts +60 -0
- package/src/plugins/builtin/doe/headless.ts +12 -8
- package/src/plugins/builtin/doe/index.tsx +2 -0
- package/src/plugins/builtin/doe/series.ts +62 -0
- package/src/plugins/builtin/earnings/client.ts +3 -2
- package/src/plugins/builtin/earnings/format.ts +1 -5
- package/src/plugins/builtin/earnings/headless.ts +58 -6
- package/src/plugins/builtin/earnings/history-model.ts +15 -1
- package/src/plugins/builtin/earnings/history-table.ts +13 -2
- package/src/plugins/builtin/earnings/history.tsx +7 -3
- package/src/plugins/builtin/earnings/index.tsx +9 -0
- package/src/plugins/builtin/earnings-calls/headless.ts +28 -2
- package/src/plugins/builtin/earnings-calls/index.tsx +1 -1
- package/src/plugins/builtin/earnings-ripple/index.tsx +2 -0
- package/src/plugins/builtin/econ/fred-catalog.ts +198 -0
- package/src/plugins/builtin/econ/fred-series-map.ts +0 -46
- package/src/plugins/builtin/econ/index.tsx +2 -0
- package/src/plugins/builtin/econ-statistics/defs.ts +5 -0
- package/src/plugins/builtin/econ-statistics/headless.ts +19 -4
- package/src/plugins/builtin/econ-statistics/stats.ts +1 -0
- package/src/plugins/builtin/equity-screener/headless.ts +3 -3
- package/src/plugins/builtin/equity-screener/pane.tsx +4 -11
- package/src/plugins/builtin/estimate-revisions/headless.ts +3 -3
- package/src/plugins/builtin/exposure/drivers.ts +13 -0
- package/src/plugins/builtin/exposure/headless.ts +205 -13
- package/src/plugins/builtin/exposure/holdings.ts +1 -1
- package/src/plugins/builtin/exposure/index.tsx +1 -0
- package/src/plugins/builtin/exposure/model.ts +23 -3
- package/src/plugins/builtin/exposure/pane.tsx +14 -12
- package/src/plugins/builtin/fear-greed/index.tsx +18 -10
- package/src/plugins/builtin/fear-greed/series.ts +52 -0
- package/src/plugins/builtin/futures/index.tsx +43 -3
- package/src/plugins/builtin/futures/model.ts +1 -1
- package/src/plugins/builtin/futures/returns.ts +1 -1
- package/src/plugins/builtin/futures/series.ts +13 -0
- package/src/plugins/builtin/futures/table.tsx +1 -1
- package/src/plugins/builtin/futures/use-front-returns.ts +1 -1
- package/src/plugins/builtin/futures-curve/client.ts +12 -3
- package/src/plugins/builtin/futures-curve/headless.ts +71 -10
- package/src/plugins/builtin/futures-curve/index.tsx +1 -1
- package/src/plugins/builtin/futures-curve/model.ts +66 -11
- package/src/plugins/builtin/futures-curve/pane.tsx +52 -18
- package/src/plugins/builtin/fx-matrix/client.ts +63 -0
- package/src/plugins/builtin/fx-matrix/export.ts +2 -1
- package/src/plugins/builtin/fx-matrix/headless.ts +154 -0
- package/src/plugins/builtin/fx-matrix/index.tsx +4 -4
- package/src/plugins/builtin/gpu/board.tsx +13 -10
- package/src/plugins/builtin/gpu/changes.tsx +4 -4
- package/src/plugins/builtin/gpu/client.ts +19 -1
- package/src/plugins/builtin/gpu/equities.tsx +14 -10
- package/src/plugins/builtin/gpu/headless.ts +58 -27
- package/src/plugins/builtin/gpu/history.tsx +3 -3
- package/src/plugins/builtin/gpu/index.tsx +2 -0
- package/src/plugins/builtin/gpu/model.ts +101 -16
- package/src/plugins/builtin/gpu/pane.tsx +28 -12
- package/src/plugins/builtin/gpu/series.ts +38 -0
- package/src/plugins/builtin/help/function-card.tsx +25 -6
- package/src/plugins/builtin/help/function-index.ts +2 -0
- package/src/plugins/builtin/help/index.tsx +31 -9
- package/src/plugins/builtin/holders/beneficial-model.ts +90 -3
- package/src/plugins/builtin/holders/beneficial-report.ts +57 -5
- package/src/plugins/builtin/holders/beneficial-view.tsx +55 -11
- package/src/plugins/builtin/holders/client.ts +22 -3
- package/src/plugins/builtin/holders/format.ts +18 -3
- package/src/plugins/builtin/holders/headless.ts +36 -133
- package/src/plugins/builtin/holders/pane.tsx +11 -4
- package/src/plugins/builtin/holders/report-header.ts +40 -5
- package/src/plugins/builtin/holders/report-rows.ts +240 -0
- package/src/plugins/builtin/insider/client.ts +35 -20
- package/src/plugins/builtin/insider/headless.ts +41 -11
- package/src/plugins/builtin/insider/index.tsx +26 -9
- package/src/plugins/builtin/insider/insider-data.ts +10 -0
- package/src/plugins/builtin/insider/issuer.ts +49 -0
- package/src/plugins/builtin/insider/model.ts +3 -0
- package/src/plugins/builtin/ipo-calendar/headless.ts +1 -1
- package/src/plugins/builtin/iv-history/client.ts +20 -6
- package/src/plugins/builtin/iv-history/format.ts +9 -0
- package/src/plugins/builtin/iv-history/headless.ts +56 -21
- package/src/plugins/builtin/iv-history/index.tsx +2 -0
- package/src/plugins/builtin/iv-history/model.ts +143 -8
- package/src/plugins/builtin/iv-history/screen-pane.tsx +5 -9
- package/src/plugins/builtin/iv-history/series.ts +29 -0
- package/src/plugins/builtin/jobs/headless.ts +26 -3
- package/src/plugins/builtin/jobs/index.tsx +3 -1
- package/src/plugins/builtin/jobs/series.ts +19 -0
- package/src/plugins/builtin/kelly-sizer/index.tsx +2 -0
- package/src/plugins/builtin/kelly-sizer/pane.tsx +2 -1
- package/src/plugins/builtin/kelly-sizer/portfolio.ts +0 -39
- package/src/plugins/builtin/macro-day/client.ts +44 -3
- package/src/plugins/builtin/macro-day/headless.ts +13 -10
- package/src/plugins/builtin/macro-day/model.ts +56 -10
- package/src/plugins/builtin/macro-day/pane.tsx +30 -20
- package/src/plugins/builtin/market-heatmap/headless.ts +20 -5
- package/src/plugins/builtin/market-heatmap/index.tsx +6 -0
- package/src/plugins/builtin/market-heatmap/model.ts +19 -11
- package/src/plugins/builtin/market-heatmap/portfolio.ts +2 -2
- package/src/plugins/builtin/market-movers/client.ts +7 -5
- package/src/plugins/builtin/market-movers/index.tsx +3 -2
- package/src/plugins/builtin/market-movers/model.ts +30 -0
- package/src/plugins/builtin/market-movers/screener.ts +31 -0
- package/src/plugins/builtin/market-valuation/chart-series.ts +29 -69
- package/src/plugins/builtin/market-valuation/index.tsx +3 -3
- package/src/plugins/builtin/market-valuation/indicators.ts +0 -5
- package/src/plugins/builtin/members/headless.ts +8 -3
- package/src/plugins/builtin/members/model.ts +31 -3
- package/src/plugins/builtin/members/pane.tsx +6 -8
- package/src/plugins/builtin/mna/distress/headless.ts +4 -4
- package/src/plugins/builtin/mna/headless.ts +18 -6
- package/src/plugins/builtin/money-markets/headless.ts +5 -4
- package/src/plugins/builtin/money-markets/index.tsx +2 -0
- package/src/plugins/builtin/money-markets/series.ts +41 -0
- package/src/plugins/builtin/news/index.tsx +0 -2
- package/src/plugins/builtin/news/wire/news/detail-view.tsx +53 -104
- package/src/plugins/builtin/news/wire/news/footer.ts +2 -25
- package/src/plugins/builtin/news/wire/news/preset-pane.tsx +0 -2
- package/src/plugins/builtin/notes/cli.ts +12 -7
- package/src/plugins/builtin/notes/index.tsx +1 -0
- package/src/plugins/builtin/options/index.tsx +3 -0
- package/src/plugins/builtin/options/view.tsx +1 -1
- package/src/plugins/builtin/options-calculator/inputs.ts +2 -1
- package/src/plugins/builtin/options-positioning/client.ts +7 -3
- package/src/plugins/builtin/options-positioning/headless.ts +4 -3
- package/src/plugins/builtin/options-positioning/pane.tsx +2 -2
- package/src/plugins/builtin/options-scenario/client.ts +2 -1
- package/src/plugins/builtin/options-scenario/headless.ts +1 -0
- package/src/plugins/builtin/options-scenario/hedge.ts +2 -1
- package/src/plugins/builtin/perps/client.ts +90 -16
- package/src/plugins/builtin/perps/equity-row.tsx +52 -17
- package/src/plugins/builtin/perps/freshness.ts +66 -0
- package/src/plugins/builtin/perps/headless.ts +47 -32
- package/src/plugins/builtin/perps/index.tsx +23 -4
- package/src/plugins/builtin/perps/list-perpetuals.ts +118 -0
- package/src/plugins/builtin/perps/model.ts +20 -5
- package/src/plugins/builtin/perps/open-market.ts +15 -0
- package/src/plugins/builtin/perps/pane.tsx +76 -20
- package/src/plugins/builtin/perps/series.ts +76 -0
- package/src/plugins/builtin/plugin-marketplace/index.tsx +1 -1
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +73 -67
- package/src/plugins/builtin/plugin-module.ts +3 -0
- package/src/plugins/builtin/portfolio-list/account-metrics.ts +1 -1
- package/src/plugins/builtin/portfolio-list/allocation.ts +5 -4
- package/src/plugins/builtin/portfolio-list/cell-version.ts +8 -1
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +161 -0
- package/src/plugins/builtin/portfolio-list/cli/import-13f.ts +109 -0
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +384 -74
- package/src/plugins/builtin/portfolio-list/cli/render.ts +437 -71
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +21 -4
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +121 -47
- package/src/plugins/builtin/portfolio-list/column-values.ts +104 -26
- package/src/plugins/builtin/portfolio-list/grid.tsx +1 -1
- package/src/plugins/builtin/portfolio-list/headless.ts +84 -18
- package/src/plugins/builtin/portfolio-list/imported-from.ts +8 -0
- package/src/plugins/builtin/portfolio-list/index.tsx +5 -1
- package/src/plugins/builtin/portfolio-list/live-valuation.ts +6 -2
- package/src/plugins/builtin/portfolio-list/mutations.ts +2 -9
- package/src/plugins/builtin/portfolio-list/pane/data.ts +5 -1
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +52 -9
- package/src/plugins/builtin/portfolio-list/quick-add/index.tsx +33 -11
- package/src/plugins/builtin/portfolio-list/quick-add/resolution.ts +21 -1
- package/src/plugins/builtin/portfolio-list/settings.ts +17 -0
- package/src/plugins/builtin/portfolio-list/summary/index.tsx +12 -0
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +9 -4
- package/src/plugins/builtin/portfolio-list/table.tsx +37 -7
- package/src/plugins/builtin/power/client.ts +16 -0
- package/src/plugins/builtin/power/evidence.ts +63 -10
- package/src/plugins/builtin/power/headless.ts +77 -9
- package/src/plugins/builtin/power/index.tsx +28 -3
- package/src/plugins/builtin/power/model.ts +73 -2
- package/src/plugins/builtin/power/pane.tsx +37 -9
- package/src/plugins/builtin/power/prices-client.ts +139 -0
- package/src/plugins/builtin/power/prices-headless.ts +137 -0
- package/src/plugins/builtin/power/prices-model.ts +103 -0
- package/src/plugins/builtin/power/prices.tsx +179 -0
- package/src/plugins/builtin/rate-path/headless.ts +46 -18
- package/src/plugins/builtin/realized-vol/headless.ts +5 -0
- package/src/plugins/builtin/relative-rotation/headless.ts +3 -3
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +5 -2
- package/src/plugins/builtin/research/event-model.ts +68 -24
- package/src/plugins/builtin/research/events-headless.ts +2 -1
- package/src/plugins/builtin/research/headless.ts +2 -1
- package/src/plugins/builtin/research/index.tsx +2 -0
- package/src/plugins/builtin/research-search/article.ts +65 -0
- package/src/plugins/builtin/research-search/document-view.tsx +33 -215
- package/src/plugins/builtin/research-search/model.ts +0 -9
- package/src/plugins/builtin/research-search/pane.tsx +41 -30
- package/src/plugins/builtin/research-search/snippet.ts +0 -29
- package/src/plugins/builtin/revenue-breakdown/headless.ts +18 -6
- package/src/plugins/builtin/seasonality/client.ts +15 -7
- package/src/plugins/builtin/seasonality/headless.ts +36 -12
- package/src/plugins/builtin/seasonality/index.tsx +2 -2
- package/src/plugins/builtin/seasonality/model.ts +119 -0
- package/src/plugins/builtin/seasonality/pane.tsx +108 -37
- package/src/plugins/builtin/sec/headless.ts +25 -3
- package/src/plugins/builtin/sec/index.tsx +2 -1
- package/src/plugins/builtin/series-inventory.ts +93 -0
- package/src/plugins/builtin/shared/cloud-denied.ts +15 -0
- package/src/plugins/builtin/shared/cloud-upgrade.ts +1 -1
- package/src/plugins/builtin/shared/command-tab.ts +30 -12
- package/src/plugins/builtin/shared/earnings-report.ts +55 -0
- package/src/plugins/builtin/shared/fred-points.ts +20 -0
- package/src/plugins/builtin/shared/free-preview.ts +47 -0
- package/src/plugins/builtin/shared/fx-rate-freshness.ts +101 -0
- package/src/plugins/builtin/shared/open-description.ts +29 -0
- package/src/plugins/builtin/shared/report-freshness.ts +12 -1
- package/src/plugins/builtin/shared/series-warning.ts +5 -0
- package/src/plugins/builtin/shared/volatility/options.ts +4 -1
- package/src/plugins/builtin/short-interest/headless.ts +1 -0
- package/src/plugins/builtin/short-interest/index.tsx +2 -0
- package/src/plugins/builtin/short-interest/series.ts +36 -0
- package/src/plugins/builtin/short-interest/watch-headless.ts +3 -2
- package/src/plugins/builtin/short-interest/watch-model.ts +9 -5
- package/src/plugins/builtin/short-volume/headless.ts +2 -1
- package/src/plugins/builtin/short-volume/index.tsx +2 -0
- package/src/plugins/builtin/short-volume/series.ts +23 -0
- package/src/plugins/builtin/social-mentions/headless.ts +1 -1
- package/src/plugins/builtin/social-mentions/index.tsx +2 -0
- package/src/plugins/builtin/social-mentions/series.ts +23 -0
- package/src/plugins/builtin/supply-chain/graph-pane.tsx +3 -2
- package/src/plugins/builtin/supply-chain/headless.ts +43 -11
- package/src/plugins/builtin/supply-chain/model.ts +13 -0
- package/src/plugins/builtin/supply-chain/pane.tsx +8 -6
- package/src/plugins/builtin/themes/headless.ts +74 -10
- package/src/plugins/builtin/themes/model.ts +71 -4
- package/src/plugins/builtin/themes/pane.tsx +22 -5
- package/src/plugins/builtin/thirteenf/api.ts +1 -0
- package/src/plugins/builtin/thirteenf/data.ts +6 -4
- package/src/plugins/builtin/thirteenf/headless.ts +217 -36
- package/src/plugins/builtin/thirteenf/model.ts +39 -1
- package/src/plugins/builtin/thirteenf/overlap.ts +75 -0
- package/src/plugins/builtin/thirteenf/pane.tsx +10 -1
- package/src/plugins/builtin/thirteenf/report-notes.ts +103 -1
- package/src/plugins/builtin/thirteenf/types.ts +2 -0
- package/src/plugins/builtin/ticker-detail/data-panes/returns-history.ts +114 -0
- package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +57 -2
- package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +19 -55
- package/src/plugins/builtin/ticker-detail/headless-schema.ts +30 -0
- package/src/plugins/builtin/ticker-detail/headless.ts +86 -0
- package/src/plugins/builtin/ticker-detail/index.tsx +26 -11
- package/src/plugins/builtin/ticker-detail/overview/components.tsx +1 -1
- package/src/plugins/builtin/ticker-detail/overview/futures-contract.ts +31 -0
- package/src/plugins/builtin/ticker-detail/overview/model.ts +3 -3
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +2 -1
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +49 -5
- package/src/plugins/builtin/ticker-detail/quote-monitor/index.tsx +13 -3
- package/src/plugins/builtin/time-sales/headless.ts +2 -1
- package/src/plugins/builtin/time-sales/index.tsx +2 -1
- package/src/plugins/builtin/treasury-auctions/headless.ts +16 -2
- package/src/plugins/builtin/treasury-auctions/index.tsx +1 -0
- package/src/plugins/builtin/treasury-auctions/model.ts +8 -0
- package/src/plugins/builtin/vol-surface/evidence.ts +7 -1
- package/src/plugins/builtin/vol-surface/headless.ts +51 -17
- package/src/plugins/builtin/vol-surface/heat-grid.tsx +113 -0
- package/src/plugins/builtin/vol-surface/model.ts +39 -6
- package/src/plugins/builtin/vol-surface/pane.tsx +14 -13
- package/src/plugins/builtin/vol-surface/stored.ts +63 -3
- package/src/plugins/builtin/vol-surface/surface.tsx +30 -2
- package/src/plugins/builtin/volatility/index.tsx +2 -0
- package/src/plugins/builtin/volatility/series.ts +84 -0
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +6 -5
- package/src/plugins/builtin/world-venue-map/basemap.ts +6 -3
- package/src/plugins/builtin/world-venue-map/geo-draw.tsx +2 -1
- package/src/plugins/builtin/world-venue-map/geo-series.ts +26 -1
- package/src/plugins/builtin/world-venue-map/geo-svg.tsx +6 -6
- package/src/plugins/builtin/world-venue-map/headless.ts +4 -1
- package/src/plugins/builtin/world-venue-map/index.ts +2 -1
- package/src/plugins/builtin/world-venue-map/layered-pane.tsx +24 -13
- package/src/plugins/builtin/world-venue-map/layers.ts +29 -0
- package/src/plugins/builtin/world-venue-map/map.tsx +144 -13
- package/src/plugins/builtin/world-venue-map/model.ts +56 -19
- package/src/plugins/builtin/world-venue-map/pane.tsx +5 -2
- package/src/plugins/builtin/yield-curve/chart.ts +2 -2
- package/src/plugins/builtin/yield-curve/curves.ts +21 -8
- package/src/plugins/builtin/yield-curve/headless.ts +71 -18
- package/src/plugins/builtin/yield-curve/index.tsx +4 -2
- package/src/plugins/builtin/yield-curve/series.ts +86 -0
- package/src/plugins/catalog-browser.ts +2 -1
- package/src/plugins/installer.ts +2 -2
- package/src/plugins/loader.ts +15 -0
- package/src/plugins/manager-node.ts +1 -1
- package/src/plugins/{builtin/plugin-marketplace → marketplace}/feed.ts +2 -2
- package/src/plugins/{builtin/plugin-marketplace → marketplace}/model.ts +6 -6
- package/src/plugins/{builtin/plugin-marketplace → marketplace}/store.ts +1 -1
- package/src/plugins/registry/host-actions.ts +11 -0
- package/src/plugins/registry/index.ts +89 -4
- package/src/portfolio/collection-name.ts +31 -0
- package/src/{plugins/builtin/portfolio-list → portfolio}/position-metrics.ts +6 -6
- package/src/portfolio/position-value.ts +40 -0
- package/src/portfolio/valuation-basis.ts +79 -0
- package/src/public/__snapshots__/public-api.test.ts.snap +7 -0
- package/src/public/time-series.ts +17 -0
- package/src/react/auto-refresh.ts +13 -3
- package/src/react/input.ts +33 -1
- package/src/react/key-repeat.ts +86 -0
- package/src/remote/app-host.tsx +20 -4
- package/src/remote/confirm-change.tsx +85 -0
- package/src/remote/controller-utils.ts +8 -1
- package/src/remote/controller.ts +144 -7
- package/src/remote/pane-screenshot.ts +47 -0
- package/src/remote/schema.ts +65 -2
- package/src/remote/types.ts +30 -0
- package/src/remote/watchlist.ts +306 -0
- package/src/renderers/browser/main.tsx +4 -3
- package/src/renderers/browser/research-entry.ts +4 -2
- package/src/renderers/cloudflare/worker.ts +1 -1
- package/src/renderers/dom/data-table/frozen-column.ts +3 -1
- package/src/renderers/dom/data-table/index.tsx +33 -6
- package/src/renderers/dom/data-table/row.tsx +30 -1
- package/src/renderers/dom/desktop/control-styles.ts +63 -1
- package/src/renderers/dom/desktop/controls.tsx +30 -23
- package/src/renderers/dom/desktop/dialog-actions.tsx +170 -0
- package/src/renderers/dom/desktop/icons.tsx +16 -0
- package/src/renderers/dom/dom-ui-host.tsx +3 -0
- package/src/renderers/dom/host/block-glyph-canvas.tsx +6 -3
- package/src/renderers/dom/host/box.tsx +8 -0
- package/src/renderers/dom/host/chart-surface.tsx +33 -2
- package/src/renderers/dom/host/live-frame.ts +6 -2
- package/src/renderers/dom/host/overflow-fade.ts +14 -1
- package/src/renderers/dom/host/scroll-box.tsx +32 -0
- package/src/renderers/dom/host/size-observer.ts +41 -0
- package/src/renderers/dom/host/sticky-scroll.ts +128 -0
- package/src/renderers/dom/host/style.ts +1 -1
- package/src/renderers/dom/host/surface-3d.tsx +19 -7
- package/src/renderers/dom/host/surface-fit.ts +406 -0
- package/src/renderers/dom/host/text.tsx +1 -1
- package/src/renderers/dom/input-host.tsx +1 -0
- package/src/renderers/dom/styles.css +102 -5
- package/src/renderers/electrobun/bun/application-menu/click.ts +18 -0
- package/src/renderers/electrobun/bun/index.ts +3 -2
- package/src/renderers/electrobun/shared/protocol.ts +1 -1
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +29 -2
- package/src/renderers/electrobun/view/cli-pane-shot-frame.tsx +63 -20
- package/src/renderers/electrobun/view/cli-pane-shot-health.ts +10 -26
- package/src/renderers/electrobun/view/main.tsx +5 -3
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +2 -0
- package/src/renderers/opentui/chart-surface.tsx +1 -0
- package/src/renderers/opentui/frame-capture.ts +33 -0
- package/src/renderers/opentui/host.tsx +10 -13
- package/src/renderers/opentui/pane-image/glyphs-license.txt +107 -0
- package/src/renderers/opentui/pane-image/glyphs.json +1 -0
- package/src/renderers/opentui/pane-image/index.ts +107 -0
- package/src/renderers/opentui/pane-image/raster.ts +428 -0
- package/src/renderers/opentui/start.tsx +3 -3
- package/src/renderers/opentui/test-utils.tsx +3 -0
- package/src/renderers/opentui/ui-host.tsx +29 -1
- package/src/series/capability.ts +75 -0
- package/src/series/csv.ts +160 -0
- package/src/series/files.ts +107 -0
- package/src/series/registry.ts +198 -0
- package/src/series/resolve.ts +108 -0
- package/src/series/standalone.ts +48 -0
- package/src/series/types.ts +153 -0
- package/src/series/validate.ts +171 -0
- package/src/shares/chat.ts +34 -0
- package/src/shares/dialog.tsx +295 -0
- package/src/shares/flow.tsx +56 -0
- package/src/shares/live.ts +14 -22
- package/src/shares/pane-image.ts +152 -0
- package/src/shares/personal-pane.ts +64 -0
- package/src/shares/portable-layout.ts +4 -2
- package/src/shares/prepare.ts +20 -0
- package/src/sources/gloomberb-cloud/index.ts +109 -10
- package/src/sources/gloomberb-cloud/normalizers.ts +3 -0
- package/src/sources/gloomberb-cloud/perpetuals.ts +249 -0
- package/src/sources/history-result.ts +1 -0
- package/src/sources/history-retention.ts +11 -0
- package/src/sources/listing-symbols.ts +4 -1
- package/src/sources/listing-target.ts +4 -0
- package/src/sources/provider-router/batches.ts +4 -1
- package/src/sources/provider-router/cache.ts +4 -2
- package/src/sources/provider-router/cached-routes.ts +1 -1
- package/src/sources/provider-router/financial-routes.ts +1 -0
- package/src/sources/provider-router/financials.ts +13 -0
- package/src/sources/provider-router/history.ts +43 -25
- package/src/sources/provider-router/index.ts +14 -0
- package/src/sources/provider-router/search.ts +1 -0
- package/src/state/hooks/inline-tickers.ts +49 -11
- package/src/sync/core-contributors.ts +1 -0
- package/src/test-support/shell-pane-keys.tsx +1 -0
- package/src/theme/theme-context.tsx +15 -1
- package/src/tickers/company-name.ts +75 -0
- package/src/tickers/instrument-kind.ts +34 -1
- package/src/tickers/listing-name.ts +34 -0
- package/src/tickers/listing-venues.ts +132 -0
- package/src/tickers/open-target.ts +13 -4
- package/src/tickers/perpetual-listing.ts +151 -0
- package/src/tickers/prediction-listing.ts +26 -0
- package/src/tickers/search/index.ts +72 -11
- package/src/tickers/search/ranking.ts +98 -20
- package/src/tickers/search/types.ts +7 -1
- package/src/tickers/ticker-changes.ts +213 -0
- package/src/tickers/us-listing.ts +34 -0
- package/src/time-series/economic.ts +2 -6
- package/src/time-series/hooks.ts +9 -0
- package/src/time-series/ice-credit.ts +39 -0
- package/src/time-series/resolve.ts +211 -29
- package/src/time-series/studies.ts +1 -0
- package/src/time-series/types.ts +12 -2
- package/src/time-series/use-chart-resolution.ts +32 -0
- package/src/types/config.ts +10 -2
- package/src/types/data-provider.ts +11 -0
- package/src/types/financials.ts +62 -1
- package/src/types/headless.ts +113 -0
- package/src/types/instrument.ts +4 -0
- package/src/types/plugin.ts +52 -2
- package/src/types/price-history.ts +7 -0
- package/src/types/ticker-changes.ts +26 -0
- package/src/types/ticker.ts +14 -0
- package/src/ui/context-menu.tsx +13 -1
- package/src/ui/host.tsx +57 -3
- package/src/ui/live-resize.ts +91 -0
- package/src/ui/live-stretch.ts +153 -0
- package/src/ui/measured-cells.ts +58 -0
- package/src/ui/sticky-scroll.ts +7 -0
- package/src/utils/basis-points.ts +17 -0
- package/src/utils/central-banks.ts +76 -0
- package/src/utils/cli-output.ts +131 -15
- package/src/utils/concurrency.ts +25 -0
- package/src/utils/crypto-pair.ts +20 -0
- package/src/utils/currency-pair.ts +19 -0
- package/src/utils/currency-units.ts +11 -0
- package/src/utils/datetime-format.ts +27 -6
- package/src/utils/decimal-comma.ts +19 -0
- package/src/utils/dom-screenshot-css.ts +265 -0
- package/src/utils/dom-screenshot-rasters.ts +276 -0
- package/src/utils/dom-screenshot.ts +439 -52
- package/src/utils/double-escape-close.ts +15 -1
- package/src/utils/exchange-rate-snapshot.ts +6 -2
- package/src/utils/exchanges.ts +143 -1
- package/src/utils/format.ts +35 -5
- package/src/utils/forward-dividend.ts +14 -0
- package/src/utils/fundamentals.ts +66 -0
- package/src/utils/futures-generic.ts +6 -12
- package/src/utils/fx-market-hours.ts +15 -5
- package/src/utils/fx-status.ts +6 -1
- package/src/utils/inline-content-tokenizer.ts +22 -3
- package/src/utils/market-capitalization.ts +8 -0
- package/src/utils/one-shot.ts +73 -0
- package/src/utils/options.ts +37 -8
- package/src/utils/price-history.ts +99 -42
- package/src/utils/sec-eps-basis.ts +24 -11
- package/src/utils/sec.ts +61 -7
- package/src/utils/utc-time.ts +63 -4
- package/src/plugins/builtin/fx-matrix/freshness.ts +0 -65
- /package/src/plugins/{builtin/plugin-marketplace → marketplace}/activation.ts +0 -0
- /package/src/plugins/{builtin/plugin-marketplace → marketplace}/ids.ts +0 -0
- /package/src/plugins/{builtin/plugin-marketplace → marketplace}/packs.ts +0 -0
- /package/src/{plugins/builtin/cloud → tickers}/starter-symbols.ts +0 -0
package/src/api-client/data.ts
CHANGED
|
@@ -5,7 +5,8 @@ import type { CatalystResponse, CatalystDetail, CatalystFilters, CatalystStatus,
|
|
|
5
5
|
import type { KpisPayload, GuidancePayload, KpiQueryOptions } from "./company-kpis";
|
|
6
6
|
import { companyDisclosurePath } from "./company-kpis";
|
|
7
7
|
import type { PowerBoard, PowerDetail, PowerFilter, PowerHistory } from "./power";
|
|
8
|
-
import type { PerpBoardPayload, PerpHistoryPayload, PerpRankingsPayload, PerpBoardQuery, PerpHistoryQuery,
|
|
8
|
+
import type { PerpBoardPayload, PerpEquitiesPayload, PerpEquityListing, PerpHistoryPayload, PerpRankingsPayload, PerpBoardQuery, PerpHistoryQuery,
|
|
9
|
+
PerpMarketPayload } from "./perps";
|
|
9
10
|
import type { ExposureRequest, ExposurePayload, ExposureScenario } from "./exposure";
|
|
10
11
|
import type { SupplyChainPayload, SupplyOptions } from "./supply-chain";
|
|
11
12
|
import { supplyGraphQuery, type GraphOptions, type GraphPayload } from "./supply-chain-graph";
|
|
@@ -23,18 +24,20 @@ import {
|
|
|
23
24
|
type InsolvencyNoticesParams,
|
|
24
25
|
} from "./distress";
|
|
25
26
|
import type { IpoCalendarParams, IpoCalendarPayload } from "./ipo";
|
|
27
|
+
import type { TickerChanges } from "../types/ticker-changes";
|
|
26
28
|
import type { CryptoMarketsPayload } from "./crypto-markets";
|
|
27
29
|
import type { CentralBankRatesPayload } from "./central-bank-rates";
|
|
28
30
|
import type { EstimateRevisionsPayload } from "./estimate-revisions";
|
|
29
31
|
import type { MoneyMarketsPayload } from "./money-markets";
|
|
30
|
-
import type { CloudCurveId, CloudCurveView, CloudWorldCurves } from "./yield-curves";
|
|
32
|
+
import type { CloudCurveHistory, CloudCurveId, CloudCurveView, CloudWorldCurves } from "./yield-curves";
|
|
31
33
|
import type { CdxBoardPayload, CloudCreditBoardParams, SovrBoardPayload } from "./credit-boards";
|
|
32
34
|
import type { ShortVolumePayload, ShortVolumeScope } from "./short-volume";
|
|
33
35
|
import type { BeneficialOwnersPayload, CloudBeneficialOwnersParams } from "./beneficial-owners";
|
|
34
36
|
import type { SocialMentionDayPosts, SocialMentionsPayload, SocialMentionsRange } from "./social-mentions";
|
|
35
|
-
import type { FuturesCurveAsOfPayload, FuturesCurvePayload } from "./futures-curve";
|
|
37
|
+
import type { FuturesContractTermsPayload, FuturesCurveAsOfPayload, FuturesCurvePayload } from "./futures-curve";
|
|
36
38
|
import type { CotBoardPayload, CotContractPayload, CotFamily, CotClass } from "./cot";
|
|
37
39
|
import type { DoeBoardPayload } from "./doe";
|
|
40
|
+
import type { CarbonBoard, CarbonHistory, EuropePowerBoard, EuropePowerHistory } from "./europe-energy";
|
|
38
41
|
import type { GpuBoardPayload, GpuEventsPayload, GpuHistoryPayload, GpuHistoryQuery } from "./gpu";
|
|
39
42
|
import type { CpiBoardPayload } from "./cpi";
|
|
40
43
|
import type { TapeSnapshot } from "./tape";
|
|
@@ -85,6 +88,7 @@ import {
|
|
|
85
88
|
cloudMarketSearchPath,
|
|
86
89
|
cloudMarketSymbolPath,
|
|
87
90
|
cloudNewsPath,
|
|
91
|
+
cloudNewsSearchPath,
|
|
88
92
|
cloudOptionsChainPath,
|
|
89
93
|
cloudSavedSearchPath,
|
|
90
94
|
cloudSavedSearchesPath,
|
|
@@ -109,6 +113,7 @@ import type {
|
|
|
109
113
|
CloudAnalystResearchPayload,
|
|
110
114
|
CloudShortInterestPayload,
|
|
111
115
|
CloudCdsHistoryResponse,
|
|
116
|
+
CloudCdsLevelsResponse,
|
|
112
117
|
CloudCdsResponse,
|
|
113
118
|
CloudCongressHousePayload,
|
|
114
119
|
CloudEarningsCallListPayload,
|
|
@@ -372,6 +377,17 @@ export class CloudDataApi {
|
|
|
372
377
|
);
|
|
373
378
|
}
|
|
374
379
|
|
|
380
|
+
/** Where the issuer that held a US symbol trades now, or what the symbol's holder was called before. */
|
|
381
|
+
async getCloudTickerChanges(
|
|
382
|
+
symbol: string,
|
|
383
|
+
options: { signal?: AbortSignal } = {},
|
|
384
|
+
): Promise<CloudMarketResponse<TickerChanges>> {
|
|
385
|
+
return this.request<CloudMarketResponse<TickerChanges>>(
|
|
386
|
+
`/market/ticker-changes?${new URLSearchParams({ symbol: symbol.trim().toUpperCase() })}`,
|
|
387
|
+
options.signal ? { signal: options.signal } : undefined,
|
|
388
|
+
);
|
|
389
|
+
}
|
|
390
|
+
|
|
375
391
|
async getCloudHistory(
|
|
376
392
|
symbol: string,
|
|
377
393
|
exchange: string,
|
|
@@ -517,6 +533,9 @@ export class CloudDataApi {
|
|
|
517
533
|
const query = exchange === undefined ? "" : `?${new URLSearchParams({ identity: "listing", exchange })}`;
|
|
518
534
|
return this.request(`/cloud/perps/equity/${encodeURIComponent(symbol)}${query}`);
|
|
519
535
|
}
|
|
536
|
+
async getCloudPerpsEquities(listings: readonly PerpEquityListing[]): Promise<PerpEquitiesPayload> {
|
|
537
|
+
return this.request("/cloud/perps/equities", { method: "POST", body: JSON.stringify({ listings }) });
|
|
538
|
+
}
|
|
520
539
|
async getCloudPerpsMarket(marketId: string): Promise<PerpMarketPayload> { return this.request(`/cloud/perps/market?${new URLSearchParams({ marketId })}`); }
|
|
521
540
|
|
|
522
541
|
async analyzeCloudExposure(request: ExposureRequest): Promise<ExposurePayload> {
|
|
@@ -576,6 +595,31 @@ export class CloudDataApi {
|
|
|
576
595
|
return this.request<PowerDetail>(`/cloud/power/projects/${encodeURIComponent(id)}?${params}`, { signal });
|
|
577
596
|
}
|
|
578
597
|
|
|
598
|
+
/** European day-ahead power prices by country, latest day first per market. */
|
|
599
|
+
async getCloudEuropePower(): Promise<EuropePowerBoard> {
|
|
600
|
+
return this.request<EuropePowerBoard>("/cloud/europe-energy/power", { signal: AbortSignal.timeout(30_000) });
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/** One market's daily day-ahead prices from `from` (all of them without one), oldest first. */
|
|
604
|
+
async getCloudEuropePowerHistory(code: string, from?: string | null): Promise<EuropePowerHistory> {
|
|
605
|
+
const query = from ? `?${new URLSearchParams({ from })}` : "";
|
|
606
|
+
return this.request<EuropePowerHistory>(
|
|
607
|
+
`/cloud/europe-energy/power/${encodeURIComponent(code)}/history${query}`,
|
|
608
|
+
{ signal: AbortSignal.timeout(30_000) },
|
|
609
|
+
);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/** The EU carbon allowance (EUA) auction price as of its latest auction day, with the latest auctions. */
|
|
613
|
+
async getCloudEuropeCarbon(): Promise<CarbonBoard> {
|
|
614
|
+
return this.request<CarbonBoard>("/cloud/europe-energy/carbon", { signal: AbortSignal.timeout(30_000) });
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/** The daily EUA auction price from `from` (every auction day since 2020 without one), oldest first. */
|
|
618
|
+
async getCloudEuropeCarbonHistory(from?: string | null): Promise<CarbonHistory> {
|
|
619
|
+
const query = from ? `?${new URLSearchParams({ from })}` : "";
|
|
620
|
+
return this.request<CarbonHistory>(`/cloud/europe-energy/carbon/history${query}`, { signal: AbortSignal.timeout(30_000) });
|
|
621
|
+
}
|
|
622
|
+
|
|
579
623
|
async getCloudGpuBoard(): Promise<GpuBoardPayload> {
|
|
580
624
|
return this.request<GpuBoardPayload>("/cloud/gpu/board");
|
|
581
625
|
}
|
|
@@ -608,6 +652,15 @@ export class CloudDataApi {
|
|
|
608
652
|
return this.request<CloudCurveView>(`/cloud/econ/curves/${encodeURIComponent(curve)}${query}`, { signal: AbortSignal.timeout(30_000) });
|
|
609
653
|
}
|
|
610
654
|
|
|
655
|
+
/** One tenor of a curve from `from` (all stored sessions without one), oldest first. */
|
|
656
|
+
async getCloudCurveHistory(curve: CloudCurveId, tenor: string, from?: string | null): Promise<CloudCurveHistory> {
|
|
657
|
+
const query = new URLSearchParams({ tenor, ...(from ? { from } : {}) });
|
|
658
|
+
return this.request<CloudCurveHistory>(
|
|
659
|
+
`/cloud/econ/curves/${encodeURIComponent(curve)}/history?${query}`,
|
|
660
|
+
{ signal: AbortSignal.timeout(30_000) },
|
|
661
|
+
);
|
|
662
|
+
}
|
|
663
|
+
|
|
611
664
|
/** Each market's latest curve and the session before, each on its own date. */
|
|
612
665
|
async getCloudWorldCurves(): Promise<CloudWorldCurves> {
|
|
613
666
|
return this.request<CloudWorldCurves>("/cloud/econ/curves", { signal: AbortSignal.timeout(30_000) });
|
|
@@ -703,6 +756,11 @@ export class CloudDataApi {
|
|
|
703
756
|
return this.request<FuturesCurvePayload>(`/cloud/futures/curve/${encodeURIComponent(root)}`, { signal: AbortSignal.timeout(60_000) });
|
|
704
757
|
}
|
|
705
758
|
|
|
759
|
+
/** What a futures symbol (GC=F, GCZ26, CL1) trades: its contract, terms and latest confirmed settlement. */
|
|
760
|
+
async getCloudFuturesContract(symbol: string): Promise<FuturesContractTermsPayload> {
|
|
761
|
+
return this.request<FuturesContractTermsPayload>(`/cloud/futures/contract/${encodeURIComponent(symbol)}`, { signal: AbortSignal.timeout(20_000) });
|
|
762
|
+
}
|
|
763
|
+
|
|
706
764
|
async getCloudFuturesCurveAsOf(root: string, date: string): Promise<FuturesCurveAsOfPayload> {
|
|
707
765
|
return this.request<FuturesCurveAsOfPayload>(`/cloud/futures/curve/${encodeURIComponent(root)}/as-of/${encodeURIComponent(date)}`,
|
|
708
766
|
{ signal: AbortSignal.timeout(30_000) });
|
|
@@ -720,6 +778,11 @@ export class CloudDataApi {
|
|
|
720
778
|
return this.request<CloudCdsHistoryResponse>(cloudCdsHistoryPath(params), { signal: AbortSignal.timeout(30_000) });
|
|
721
779
|
}
|
|
722
780
|
|
|
781
|
+
/** Every listed issuer's latest 5Y level in one request. */
|
|
782
|
+
async getCloudCdsLevels(): Promise<CloudCdsLevelsResponse> {
|
|
783
|
+
return this.request<CloudCdsLevelsResponse>("/cloud/credit/cds/levels", { signal: AbortSignal.timeout(30_000) });
|
|
784
|
+
}
|
|
785
|
+
|
|
723
786
|
async getCloudCdxBoard(params: CloudCreditBoardParams = {}): Promise<CdxBoardPayload> {
|
|
724
787
|
return this.request<CdxBoardPayload>(cloudCreditBoardPath("cdx", params), { signal: AbortSignal.timeout(30_000) });
|
|
725
788
|
}
|
|
@@ -926,6 +989,13 @@ export class CloudDataApi {
|
|
|
926
989
|
return this.request<CloudNewsListResponse>(cloudNewsPath(params));
|
|
927
990
|
}
|
|
928
991
|
|
|
992
|
+
async searchCloudNews(
|
|
993
|
+
query: string,
|
|
994
|
+
limit?: number,
|
|
995
|
+
): Promise<CloudNewsListResponse> {
|
|
996
|
+
return this.request<CloudNewsListResponse>(cloudNewsSearchPath(query, limit));
|
|
997
|
+
}
|
|
998
|
+
|
|
929
999
|
async getCloudNewsStory(storyId: string): Promise<CloudNewsPayload> {
|
|
930
1000
|
return this.request<CloudNewsPayload>(
|
|
931
1001
|
`/news/${encodeURIComponent(storyId)}`,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { EarningsDateStatus, EarningsEpsBasis } from "../types/financials";
|
|
2
|
+
|
|
1
3
|
/** Before the open, during the session, after the close. */
|
|
2
4
|
export type EarningsTiming = "bmo" | "dmh" | "amc";
|
|
3
5
|
|
|
@@ -44,6 +46,8 @@ export interface EarningsReport {
|
|
|
44
46
|
revenueAnalysts: number | null;
|
|
45
47
|
implied: EarningsImpliedMove | null;
|
|
46
48
|
realized: EarningsRealizedMove | null;
|
|
49
|
+
/** Whether the date is out, announced or projected; absent from older servers. */
|
|
50
|
+
dateStatus?: EarningsDateStatus;
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
export interface EarningsCalendarReport extends EarningsReport {
|
|
@@ -61,6 +65,8 @@ export interface EarningsCalendarPayload {
|
|
|
61
65
|
|
|
62
66
|
interface EarningsHistoryReport extends EarningsReport {
|
|
63
67
|
revenueActual: number | null;
|
|
68
|
+
/** Null when the basis cannot be determined; absent from older servers. */
|
|
69
|
+
epsBasis?: EarningsEpsBasis | null;
|
|
64
70
|
}
|
|
65
71
|
|
|
66
72
|
export interface EarningsHistoryPayload {
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/** Who publishes the prices; their licence asks for this attribution. */
|
|
2
|
+
interface EuropeEnergySource {
|
|
3
|
+
name: string;
|
|
4
|
+
licence: string;
|
|
5
|
+
url: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** One market's latest day-ahead price and its context, all as of `date`. */
|
|
9
|
+
export interface PowerPriceRow {
|
|
10
|
+
/** ISO 3166 alpha-2: DE, FR, GB. */
|
|
11
|
+
code: string;
|
|
12
|
+
name: string;
|
|
13
|
+
/** Latest delivery day with a price. */
|
|
14
|
+
date: string | null;
|
|
15
|
+
/** EUR/MWh, the day's load-weighted average of the day-ahead auction. */
|
|
16
|
+
price: number | null;
|
|
17
|
+
previousDate: string | null;
|
|
18
|
+
change: number | null;
|
|
19
|
+
average7: number | null;
|
|
20
|
+
average30: number | null;
|
|
21
|
+
yearAgoDate: string | null;
|
|
22
|
+
yearAgo: number | null;
|
|
23
|
+
low52w: number | null;
|
|
24
|
+
high52w: number | null;
|
|
25
|
+
/** Weekly means over the year to `date`, oldest first. */
|
|
26
|
+
trail: Array<{ date: string; value: number }>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface EuropePowerBoard {
|
|
30
|
+
generatedAt: string;
|
|
31
|
+
status: "available" | "unavailable";
|
|
32
|
+
market: "day-ahead";
|
|
33
|
+
unit: "EUR/MWh";
|
|
34
|
+
source: EuropeEnergySource;
|
|
35
|
+
/** When the published file was last read, and when its publisher last changed it. */
|
|
36
|
+
checkedAt: string | null;
|
|
37
|
+
publishedAt: string | null;
|
|
38
|
+
gaps: string[];
|
|
39
|
+
rows: PowerPriceRow[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface EuropePowerHistory {
|
|
43
|
+
code: string;
|
|
44
|
+
name: string;
|
|
45
|
+
market: "day-ahead";
|
|
46
|
+
unit: "EUR/MWh";
|
|
47
|
+
source: EuropeEnergySource;
|
|
48
|
+
/** Oldest first. */
|
|
49
|
+
points: Array<{ date: string; value: number }>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** One EU ETS primary-market auction. Prices in EUR/tCO2, volumes in tCO2. */
|
|
53
|
+
interface CarbonAuction {
|
|
54
|
+
date: string;
|
|
55
|
+
auction: string;
|
|
56
|
+
contract: string;
|
|
57
|
+
/** successful, cancelled. */
|
|
58
|
+
status: string;
|
|
59
|
+
/** EU (common platform), DE, PL, XI (Northern Ireland). */
|
|
60
|
+
zone: string | null;
|
|
61
|
+
/** Null when the auction did not clear. */
|
|
62
|
+
price: number | null;
|
|
63
|
+
minBid: number | null;
|
|
64
|
+
maxBid: number | null;
|
|
65
|
+
meanBid: number | null;
|
|
66
|
+
medianBid: number | null;
|
|
67
|
+
volume: number;
|
|
68
|
+
coverRatio: number | null;
|
|
69
|
+
bidders: number | null;
|
|
70
|
+
successfulBidders: number | null;
|
|
71
|
+
/** An aviation allowance (EUAA) auction, which is not the EUA price. */
|
|
72
|
+
aviation: boolean;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** The EUA price as of its latest auction day: the day's cleared auctions, volume-weighted. */
|
|
76
|
+
interface CarbonPriceRow extends Omit<PowerPriceRow, "code"> {
|
|
77
|
+
code: "EUA";
|
|
78
|
+
/** tCO2 auctioned that day, and in how many auctions. */
|
|
79
|
+
volume: number | null;
|
|
80
|
+
auctions: number | null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface CarbonBoard {
|
|
84
|
+
generatedAt: string;
|
|
85
|
+
status: "available" | "unavailable";
|
|
86
|
+
/** The primary auction clearing price, not a futures settlement. */
|
|
87
|
+
market: "primary auction";
|
|
88
|
+
unit: "EUR/tCO2";
|
|
89
|
+
source: { name: string; url: string };
|
|
90
|
+
checkedAt: string | null;
|
|
91
|
+
publishedAt: string | null;
|
|
92
|
+
gaps: string[];
|
|
93
|
+
row: CarbonPriceRow;
|
|
94
|
+
/** Newest first. */
|
|
95
|
+
auctions: CarbonAuction[];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface CarbonHistory {
|
|
99
|
+
code: "EUA";
|
|
100
|
+
name: string;
|
|
101
|
+
market: "primary auction";
|
|
102
|
+
unit: "EUR/tCO2";
|
|
103
|
+
source: { name: string; url: string };
|
|
104
|
+
/** Each auction day's price, oldest first. */
|
|
105
|
+
points: Array<{ date: string; value: number }>;
|
|
106
|
+
}
|
|
@@ -1,3 +1,37 @@
|
|
|
1
|
+
/** What one contract of a root is, from the exchange's rulebook. */
|
|
2
|
+
export interface FuturesContractSpec {
|
|
3
|
+
/** What a quoted price counts: "USD / troy oz", "US cents / bushel", "index points". */
|
|
4
|
+
unit: string
|
|
5
|
+
/** One contract as the exchange words it: "100 troy oz", "$50 x index". */
|
|
6
|
+
size: string
|
|
7
|
+
/** US dollars a move of 1.0 in the quoted price makes on one contract. */
|
|
8
|
+
pointValue: number
|
|
9
|
+
/** The smallest outright price move, in the quoted unit. */
|
|
10
|
+
tick: number
|
|
11
|
+
/** US dollars one tick makes on one contract. */
|
|
12
|
+
tickValue: number
|
|
13
|
+
settlement: "physical" | "cash"
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** What a futures symbol trades: the contract behind it, its terms and its latest confirmed settlement. */
|
|
17
|
+
export interface FuturesContractTermsPayload {
|
|
18
|
+
/** The symbol asked for: GC=F, GCZ26 or CL1. */
|
|
19
|
+
symbol: string
|
|
20
|
+
root: string
|
|
21
|
+
name: string
|
|
22
|
+
/** The listed contract the symbol prices today (GCZ26 for GC=F); null where it cannot be placed. */
|
|
23
|
+
contract: string | null
|
|
24
|
+
contractSymbol: string | null
|
|
25
|
+
deliveryMonth: string | null
|
|
26
|
+
spec: FuturesContractSpec | null
|
|
27
|
+
lastTrade: string | null
|
|
28
|
+
firstNotice: string | null
|
|
29
|
+
/** Past first notice: a long can be assigned delivery. */
|
|
30
|
+
inDelivery: boolean
|
|
31
|
+
/** The newest exchange settlement confirmed for the contract, with its session. */
|
|
32
|
+
settlement: { price: number; date: string } | null
|
|
33
|
+
}
|
|
34
|
+
|
|
1
35
|
/** Gloom Cloud futures prices retain provider denomination and explicit quote units. */
|
|
2
36
|
export interface FuturesContract {
|
|
3
37
|
symbol: string
|
|
@@ -17,6 +51,18 @@ export interface FuturesContract {
|
|
|
17
51
|
samples: number
|
|
18
52
|
historyStart: string | null
|
|
19
53
|
historyEnd: string | null
|
|
54
|
+
/**
|
|
55
|
+
* The exchange settlement for the curve's settlementDate; null when none is
|
|
56
|
+
* confirmed for that session. `price` is the latest trade, never a settlement,
|
|
57
|
+
* except on a Cboe curve, whose prices are settlements.
|
|
58
|
+
*/
|
|
59
|
+
settlement?: number | null
|
|
60
|
+
/** The last trading day. */
|
|
61
|
+
lastTrade?: string | null
|
|
62
|
+
/** First notice day of a physically delivered contract; null where there is none. */
|
|
63
|
+
firstNotice?: string | null
|
|
64
|
+
/** Past first notice: a long can be assigned delivery. */
|
|
65
|
+
inDelivery?: boolean
|
|
20
66
|
}
|
|
21
67
|
|
|
22
68
|
export interface FuturesCurvePayload {
|
|
@@ -51,6 +97,10 @@ export interface FuturesCurvePayload {
|
|
|
51
97
|
state: "contango" | "backwardation" | "flat" | "unavailable"
|
|
52
98
|
}
|
|
53
99
|
gaps: string[]
|
|
100
|
+
/** The session the contracts' settlements are for; null when none is confirmed. */
|
|
101
|
+
settlementDate?: string | null
|
|
102
|
+
/** The root's contract terms; null where they are not listed. */
|
|
103
|
+
spec?: FuturesContractSpec | null
|
|
54
104
|
}
|
|
55
105
|
|
|
56
106
|
|
|
@@ -78,6 +128,12 @@ export interface FuturesCurveAsOfPayload {
|
|
|
78
128
|
/** When the price was made; older than tradeDate when the contract did not trade that day. */
|
|
79
129
|
asOf: string
|
|
80
130
|
stale: boolean
|
|
131
|
+
/** The price is the exchange settlement for tradeDate; otherwise that session's last trade or, when stale, an earlier price. */
|
|
132
|
+
settled?: boolean
|
|
133
|
+
lastTrade?: string | null
|
|
134
|
+
firstNotice?: string | null
|
|
135
|
+
inDelivery?: boolean
|
|
81
136
|
}>
|
|
82
137
|
gaps: string[]
|
|
138
|
+
spec?: FuturesContractSpec | null
|
|
83
139
|
}
|
package/src/api-client/index.ts
CHANGED
|
@@ -59,7 +59,7 @@ export type {
|
|
|
59
59
|
/** Server-side caps for `/assist/command`; enforced here so a 422 is never sent. */
|
|
60
60
|
const ASSIST_QUERY_MAX_LENGTH = 200;
|
|
61
61
|
const ASSIST_COMMAND_LIMIT = 150;
|
|
62
|
-
const ASSIST_ARG_OPTION_LIMIT =
|
|
62
|
+
const ASSIST_ARG_OPTION_LIMIT = 64;
|
|
63
63
|
const ASSIST_ARG_OPTION_VALUE_MAX_LENGTH = 40;
|
|
64
64
|
const ASSIST_ARG_OPTION_LABEL_MAX_LENGTH = 60;
|
|
65
65
|
const ASSIST_REQUEST_TIMEOUT_MS = 6_000;
|
|
@@ -643,6 +643,8 @@ class GloomApiClient {
|
|
|
643
643
|
chatAttachmentsSupported = this.chat.attachmentsSupported.bind(this.chat);
|
|
644
644
|
subscribeChatAttachmentSupport = this.chat.subscribeAttachmentSupport.bind(this.chat);
|
|
645
645
|
editMessage = this.chat.editMessage.bind(this.chat);
|
|
646
|
+
setChatReaction = this.chat.setReaction.bind(this.chat);
|
|
647
|
+
subscribeChatReactions = this.chat.subscribeReactions.bind(this.chat);
|
|
646
648
|
connectChannel = this.chat.connectChannel.bind(this.chat);
|
|
647
649
|
subscribeChatNotifications = this.chat.subscribeNotifications.bind(this.chat);
|
|
648
650
|
subscribeChatPresence = this.chat.subscribePresence.bind(this.chat);
|
|
@@ -738,6 +740,7 @@ class GloomApiClient {
|
|
|
738
740
|
getCloudShortInterest = this.data.getCloudShortInterest.bind(this.data);
|
|
739
741
|
getCloudAnalystResearch = this.data.getCloudAnalystResearch.bind(this.data);
|
|
740
742
|
getCloudCorporateActions = this.data.getCloudCorporateActions.bind(this.data);
|
|
743
|
+
getCloudTickerChanges = this.data.getCloudTickerChanges.bind(this.data);
|
|
741
744
|
getCloudHistory = this.data.getCloudHistory.bind(this.data);
|
|
742
745
|
getCloudExchangeRate = this.data.getCloudExchangeRate.bind(this.data);
|
|
743
746
|
getCloudEconomicCalendar = this.data.getCloudEconomicCalendar.bind(this.data);
|
|
@@ -775,6 +778,7 @@ class GloomApiClient {
|
|
|
775
778
|
getCloudSocialMentionPosts = this.data.getCloudSocialMentionPosts.bind(this.data);
|
|
776
779
|
getCloudFuturesCurve = this.data.getCloudFuturesCurve.bind(this.data);
|
|
777
780
|
getCloudFuturesCurveAsOf = this.data.getCloudFuturesCurveAsOf.bind(this.data);
|
|
781
|
+
getCloudFuturesContract = this.data.getCloudFuturesContract.bind(this.data);
|
|
778
782
|
getCloudRatePath = this.data.getCloudRatePath.bind(this.data);
|
|
779
783
|
getCloudShiller = this.data.getCloudShiller.bind(this.data);
|
|
780
784
|
getCloudCotBoard = this.data.getCloudCotBoard.bind(this.data);
|
|
@@ -795,6 +799,7 @@ class GloomApiClient {
|
|
|
795
799
|
getCloudPerpsRankings = this.data.getCloudPerpsRankings.bind(this.data);
|
|
796
800
|
getCloudPerpsCompare = this.data.getCloudPerpsCompare.bind(this.data);
|
|
797
801
|
getCloudPerpsEquity = this.data.getCloudPerpsEquity.bind(this.data);
|
|
802
|
+
getCloudPerpsEquities = this.data.getCloudPerpsEquities.bind(this.data);
|
|
798
803
|
getCloudPerpsMarket = this.data.getCloudPerpsMarket.bind(this.data);
|
|
799
804
|
analyzeCloudExposure = this.data.analyzeCloudExposure.bind(this.data);
|
|
800
805
|
getCloudExposureScenarios = this.data.getCloudExposureScenarios.bind(this.data);
|
|
@@ -808,6 +813,10 @@ class GloomApiClient {
|
|
|
808
813
|
getCloudPowerBoard = this.data.getCloudPowerBoard.bind(this.data);
|
|
809
814
|
getCloudPowerHistory = this.data.getCloudPowerHistory.bind(this.data);
|
|
810
815
|
getCloudPowerProject = this.data.getCloudPowerProject.bind(this.data);
|
|
816
|
+
getCloudEuropePower = this.data.getCloudEuropePower.bind(this.data);
|
|
817
|
+
getCloudEuropePowerHistory = this.data.getCloudEuropePowerHistory.bind(this.data);
|
|
818
|
+
getCloudEuropeCarbon = this.data.getCloudEuropeCarbon.bind(this.data);
|
|
819
|
+
getCloudEuropeCarbonHistory = this.data.getCloudEuropeCarbonHistory.bind(this.data);
|
|
811
820
|
getCloudGpuBoard = this.data.getCloudGpuBoard.bind(this.data);
|
|
812
821
|
getCloudGpuHistory = this.data.getCloudGpuHistory.bind(this.data);
|
|
813
822
|
getCloudGpuEvents = this.data.getCloudGpuEvents.bind(this.data);
|
|
@@ -815,9 +824,11 @@ class GloomApiClient {
|
|
|
815
824
|
getCloudTape = this.data.getCloudTape.bind(this.data);
|
|
816
825
|
getCloudYieldCurve = this.data.getCloudYieldCurve.bind(this.data);
|
|
817
826
|
getCloudCurve = this.data.getCloudCurve.bind(this.data);
|
|
827
|
+
getCloudCurveHistory = this.data.getCloudCurveHistory.bind(this.data);
|
|
818
828
|
getCloudWorldCurves = this.data.getCloudWorldCurves.bind(this.data);
|
|
819
829
|
getCloudCds = this.data.getCloudCds.bind(this.data);
|
|
820
830
|
getCloudCdsHistory = this.data.getCloudCdsHistory.bind(this.data);
|
|
831
|
+
getCloudCdsLevels = this.data.getCloudCdsLevels.bind(this.data);
|
|
821
832
|
getCloudCdxBoard = this.data.getCloudCdxBoard.bind(this.data);
|
|
822
833
|
getCloudSovrBoard = this.data.getCloudSovrBoard.bind(this.data);
|
|
823
834
|
getCloudCongressHouse = this.data.getCloudCongressHouse.bind(this.data);
|
|
@@ -843,6 +854,7 @@ class GloomApiClient {
|
|
|
843
854
|
updateCloudSavedSearch = this.data.updateCloudSavedSearch.bind(this.data);
|
|
844
855
|
deleteCloudSavedSearch = this.data.deleteCloudSavedSearch.bind(this.data);
|
|
845
856
|
getCloudNews = this.data.getCloudNews.bind(this.data);
|
|
857
|
+
searchCloudNews = this.data.searchCloudNews.bind(this.data);
|
|
846
858
|
getCloudNewsStory = this.data.getCloudNewsStory.bind(this.data);
|
|
847
859
|
getCloudTickerTweets = this.data.getCloudTickerTweets.bind(this.data);
|
|
848
860
|
searchCloudTweets = this.data.searchCloudTweets.bind(this.data);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CloudCorporateActionsPayload, CloudQuotePayload } from "./types";
|
|
1
|
+
import type { CloudCorporateActionsPayload, CloudMoverSessionFields, CloudQuotePayload } from "./types";
|
|
2
2
|
|
|
3
3
|
export interface ScreenerQuote {
|
|
4
4
|
symbol: string;
|
|
@@ -19,6 +19,8 @@ export interface ScreenerQuote {
|
|
|
19
19
|
lastUpdated?: number;
|
|
20
20
|
/** Session-fixed, so the price column reads its decimals from it rather than from each tick. */
|
|
21
21
|
previousClose?: number;
|
|
22
|
+
/** The quote's sessions beside the live print the list ranks by, when the server sends them. */
|
|
23
|
+
sessions?: CloudMoverSessionFields;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
|
|
@@ -63,6 +65,13 @@ export interface MarketHeatmapResult {
|
|
|
63
65
|
session?: "REGULAR" | "PRE" | "POST" | "CLOSED" | null;
|
|
64
66
|
/** The completed regular session every stored tile describes outside the regular session, as a New York date; null while it trades. */
|
|
65
67
|
regularSessionDate?: string | null;
|
|
68
|
+
/**
|
|
69
|
+
* When that session closed, in epoch milliseconds: its real close from the
|
|
70
|
+
* exchange calendar, so an early close reads 13:00 New York. Null while a
|
|
71
|
+
* session trades and when the snapshot names no session; an older server
|
|
72
|
+
* leaves it out.
|
|
73
|
+
*/
|
|
74
|
+
regularSessionClosedAt?: number | null;
|
|
66
75
|
assets: MarketHeatmapAsset[];
|
|
67
76
|
}
|
|
68
77
|
|
|
@@ -77,7 +86,10 @@ export interface MarketMoversPayload {
|
|
|
77
86
|
export interface DividendSummary {
|
|
78
87
|
trailingAnnualDividendRate: number | null;
|
|
79
88
|
trailingAnnualDividendYield: number | null;
|
|
89
|
+
/** The indicated annual rate fundamentals serve: the latest regular distribution annualized. */
|
|
80
90
|
forwardAnnualDividendRate: number | null;
|
|
91
|
+
/** The ex-date of the distribution that rate annualizes, YYYY-MM-DD. */
|
|
92
|
+
forwardRateAsOf?: string | null;
|
|
81
93
|
payoutRatio: number | null;
|
|
82
94
|
exDividendDate: number | null;
|
|
83
95
|
dividendDate: number | null;
|
|
@@ -6,6 +6,8 @@ import type {
|
|
|
6
6
|
ChatMessage,
|
|
7
7
|
ChatMessageOrigin,
|
|
8
8
|
ChatNotification,
|
|
9
|
+
ChatReaction,
|
|
10
|
+
ChatReactionUser,
|
|
9
11
|
ChatStateResponse,
|
|
10
12
|
CloudSavedSearch,
|
|
11
13
|
CloudSearchHit,
|
|
@@ -98,6 +100,7 @@ export function normalizeChatMessage(message: ChatMessage): ChatMessage {
|
|
|
98
100
|
: {}),
|
|
99
101
|
};
|
|
100
102
|
if ("attachments" in message) normalized.attachments = normalizeChatAttachments(message.attachments);
|
|
103
|
+
if ("reactions" in message) normalized.reactions = normalizeChatReactions(message.reactions);
|
|
101
104
|
if (message.origin !== undefined && !CHAT_MESSAGE_ORIGINS.includes(message.origin)) delete normalized.origin;
|
|
102
105
|
if (message.attachmentReview !== "pending" && message.attachmentReview !== "failed") {
|
|
103
106
|
delete normalized.attachmentReview;
|
|
@@ -117,6 +120,35 @@ export function normalizeChatDiscordLink(value: unknown): ChatDiscordLink {
|
|
|
117
120
|
};
|
|
118
121
|
}
|
|
119
122
|
|
|
123
|
+
/** Reactions as the server sent them, dropping anything malformed. */
|
|
124
|
+
export function normalizeChatReactions(value: unknown): ChatReaction[] {
|
|
125
|
+
if (!Array.isArray(value)) return [];
|
|
126
|
+
const reactions: ChatReaction[] = [];
|
|
127
|
+
for (const entry of value) {
|
|
128
|
+
if (!entry || typeof entry !== "object") continue;
|
|
129
|
+
const raw = entry as Record<string, unknown>;
|
|
130
|
+
if (typeof raw.emoji !== "string" || !raw.emoji) continue;
|
|
131
|
+
const count = typeof raw.count === "number" && Number.isFinite(raw.count) ? Math.max(0, Math.floor(raw.count)) : 0;
|
|
132
|
+
if (count === 0) continue;
|
|
133
|
+
const users = Array.isArray(raw.users)
|
|
134
|
+
? raw.users.flatMap((user): ChatReactionUser[] => {
|
|
135
|
+
if (!user || typeof user !== "object") return [];
|
|
136
|
+
const candidate = user as Record<string, unknown>;
|
|
137
|
+
if (typeof candidate.id !== "string") return [];
|
|
138
|
+
const accountType = candidate.accountType;
|
|
139
|
+
return [{
|
|
140
|
+
id: candidate.id,
|
|
141
|
+
username: typeof candidate.username === "string" ? candidate.username : null,
|
|
142
|
+
displayName: typeof candidate.displayName === "string" ? candidate.displayName : "User",
|
|
143
|
+
...(accountType === "human" || accountType === "managed_llm" || accountType === "discord" ? { accountType } : {}),
|
|
144
|
+
}];
|
|
145
|
+
})
|
|
146
|
+
: [];
|
|
147
|
+
reactions.push({ emoji: raw.emoji, count, me: raw.me === true, users });
|
|
148
|
+
}
|
|
149
|
+
return reactions;
|
|
150
|
+
}
|
|
151
|
+
|
|
120
152
|
export function normalizeChatMessages(messages: ChatMessage[]): ChatMessage[] {
|
|
121
153
|
return messages.map((message) => normalizeChatMessage(message));
|
|
122
154
|
}
|
package/src/api-client/paths.ts
CHANGED
|
@@ -576,6 +576,13 @@ export function cloudNewsPath(params: CloudNewsParams = {}): string {
|
|
|
576
576
|
return appendQuery("/news", search);
|
|
577
577
|
}
|
|
578
578
|
|
|
579
|
+
/** Stories whose headline, summary or publisher matches the text, best match first; the service takes at most 100. */
|
|
580
|
+
export function cloudNewsSearchPath(query: string, limit?: number): string {
|
|
581
|
+
const search = new URLSearchParams({ query });
|
|
582
|
+
if (limit != null) search.set("limit", String(limit));
|
|
583
|
+
return appendQuery("/news/search", search);
|
|
584
|
+
}
|
|
585
|
+
|
|
579
586
|
export function cloudTickerTweetsPath(params: CloudTickerTweetsParams): string {
|
|
580
587
|
const search = new URLSearchParams({ ticker: params.ticker });
|
|
581
588
|
if (params.limit != null) search.set("limit", String(params.limit));
|
package/src/api-client/perps.ts
CHANGED
|
@@ -147,6 +147,14 @@ export interface PerpBoardPayload {
|
|
|
147
147
|
access: "pro" | "preview"; sources?: unknown[];
|
|
148
148
|
}
|
|
149
149
|
export interface PerpEquityListing { symbol: string; exchange: string }
|
|
150
|
+
/**
|
|
151
|
+
* The batch lookup a watchlist or portfolio makes: one entry per requested listing, in its order, with the contract
|
|
152
|
+
* the single equity lookup would list first, or none. `listing` is null when the server cannot read the listing.
|
|
153
|
+
*/
|
|
154
|
+
export interface PerpEquitiesPayload {
|
|
155
|
+
status: string; asOf: string | null; access: "pro" | "preview"; locked: number;
|
|
156
|
+
results: { listing: PerpEquityListing | null; market: PerpBoardRow | null }[];
|
|
157
|
+
}
|
|
150
158
|
export interface PerpHistoryPayload {
|
|
151
159
|
status: string; marketId: string; rows: PerpHistoryPoint[]; funding: PerpFunding[]; candles: PerpCandle[];
|
|
152
160
|
/** Absent from servers older than the long/short series: read as empty. */
|
|
@@ -408,8 +408,15 @@ export class CloudApiRequestTransport {
|
|
|
408
408
|
// Crash reports, usage counts and command-search reports are background
|
|
409
409
|
// traffic: a rate-limited, timed-out or missing one must not show up as a
|
|
410
410
|
// Cloud outage in the connections pane. Nor must the map's probe for geo
|
|
411
|
-
// layers, which a server without them answers with 404
|
|
412
|
-
|
|
411
|
+
// layers, which a server without them answers with 404, or a ticker
|
|
412
|
+
// change lookup: a note beside a quote, never one of the refused market
|
|
413
|
+
// requests a lookup of many symbols waits out and retries.
|
|
414
|
+
if (
|
|
415
|
+
path.startsWith("/telemetry/")
|
|
416
|
+
|| path === "/assist/searches"
|
|
417
|
+
|| path === "/cloud/geo/layers"
|
|
418
|
+
|| path.startsWith("/market/ticker-changes?")
|
|
419
|
+
) return request();
|
|
413
420
|
return this.connectionHealth.track(
|
|
414
421
|
GLOOM_CLOUD_HTTP_CONNECTION_ID,
|
|
415
422
|
operation,
|
|
@@ -6,6 +6,9 @@ import { createWallExperimentSession, type WallExperiment, type WallExperimentCo
|
|
|
6
6
|
import { createUpgradeExperimentSession, UPGRADE_PERSONALIZED, type UpgradeExperimentContext, type UpgradePersonalizedVariant } from "./upgrade-experiment";
|
|
7
7
|
import { hasProAccess } from "./plan-rules";
|
|
8
8
|
import { withDeadline } from "../utils/async-deadline";
|
|
9
|
+
import { browserDoNotTrack } from "../telemetry/crash-reports-dom";
|
|
10
|
+
import { currentTelemetryConfig } from "../telemetry/live-config";
|
|
11
|
+
import { usageTelemetryAllowed } from "../telemetry/usage-counts";
|
|
9
12
|
|
|
10
13
|
export type ResearchActivity =
|
|
11
14
|
| "workspace_opened"
|
|
@@ -234,12 +237,7 @@ function stripHandoffParams(url: URL): void {
|
|
|
234
237
|
/** Hosted web analytics only. Native local use never creates an identifier. */
|
|
235
238
|
export function initializeBrowserResearchActivity(): void {
|
|
236
239
|
try {
|
|
237
|
-
if (
|
|
238
|
-
navigator.doNotTrack === "1" ||
|
|
239
|
-
(navigator as Navigator & { globalPrivacyControl?: boolean })
|
|
240
|
-
.globalPrivacyControl
|
|
241
|
-
)
|
|
242
|
-
return;
|
|
240
|
+
if (!researchTelemetryAllowed()) return;
|
|
243
241
|
const url = new URL(location.href);
|
|
244
242
|
const incoming = readHandoffId(url);
|
|
245
243
|
const stored = localStorage.getItem(ANONYMOUS_ID_STORAGE_KEY);
|
|
@@ -269,6 +267,7 @@ export function initializeBrowserResearchActivity(): void {
|
|
|
269
267
|
*/
|
|
270
268
|
export function initializeDesktopResearchActivity(storage: StorageLike = localStorage): void {
|
|
271
269
|
try {
|
|
270
|
+
if (!researchTelemetryAllowed()) return;
|
|
272
271
|
const stored = storage.getItem(ANONYMOUS_ID_STORAGE_KEY);
|
|
273
272
|
anonymousId = stored && ANONYMOUS_ID.test(stored) ? stored : undefined;
|
|
274
273
|
attribution = readStoredAttribution(storage.getItem(ATTRIBUTION_STORAGE_KEY));
|
|
@@ -278,6 +277,7 @@ export function initializeDesktopResearchActivity(storage: StorageLike = localSt
|
|
|
278
277
|
}
|
|
279
278
|
|
|
280
279
|
export function adoptDesktopHandoff(href: string, storage: StorageLike = localStorage, now = Date.now()): boolean {
|
|
280
|
+
if (!researchTelemetryAllowed()) return false;
|
|
281
281
|
if (!carriesHandoff(href)) return false;
|
|
282
282
|
try {
|
|
283
283
|
const url = new URL(href);
|
|
@@ -369,6 +369,7 @@ export function recordResearchActivity(
|
|
|
369
369
|
tab?: string,
|
|
370
370
|
{ desks, placement: rawPlacement, teaser_kind, cta }: ResearchActivityDetails = {},
|
|
371
371
|
): void {
|
|
372
|
+
if (!researchTelemetryAllowed()) return;
|
|
372
373
|
const target = getCurrentPluginTarget();
|
|
373
374
|
const user = apiClient.getCurrentUser();
|
|
374
375
|
const wallEvent = event === "wall_viewed" || event === "wall_cta_clicked";
|
|
@@ -451,6 +452,7 @@ function webExperimentAttribution(): { experiments?: string } {
|
|
|
451
452
|
* Privacy Control) and not driven by automation are asked. See web-experiments.ts.
|
|
452
453
|
*/
|
|
453
454
|
export function exposeWebExperiment(experiment: string): Promise<string | null> {
|
|
455
|
+
if (!researchTelemetryAllowed()) return Promise.resolve(null);
|
|
454
456
|
if (getCurrentPluginTarget() !== "web") return Promise.resolve(null);
|
|
455
457
|
try {
|
|
456
458
|
return exposeExperiment(experiment, {
|
|
@@ -473,11 +475,13 @@ export function exposeWebExperiment(experiment: string): Promise<string | null>
|
|
|
473
475
|
}
|
|
474
476
|
}
|
|
475
477
|
|
|
478
|
+
/** Research milestones, attribution and exposures share the Usage off switch. */
|
|
479
|
+
function researchTelemetryAllowed(): boolean {
|
|
480
|
+
return usageTelemetryAllowed(currentTelemetryConfig(undefined)) && !browserDoNotTrack();
|
|
481
|
+
}
|
|
482
|
+
|
|
476
483
|
function wallPrivacyBlocked(): boolean {
|
|
477
|
-
|
|
478
|
-
return navigator.doNotTrack === "1"
|
|
479
|
-
|| (navigator as Navigator & { globalPrivacyControl?: boolean }).globalPrivacyControl === true
|
|
480
|
-
|| navigator.webdriver === true;
|
|
484
|
+
return !researchTelemetryAllowed() || (typeof navigator !== "undefined" && navigator.webdriver === true);
|
|
481
485
|
}
|
|
482
486
|
|
|
483
487
|
function wallExperimentContext(): WallExperimentContext {
|
|
@@ -568,6 +572,7 @@ export function recordWallCtaClicked(placement: string, cta: "login" | "signup")
|
|
|
568
572
|
export function researchUpgradeUrl(returnTo?: string): string {
|
|
569
573
|
const url = new URL("https://gloom.sh/cloud?upgrade=pro");
|
|
570
574
|
if (returnTo) url.searchParams.set("returnTo", returnTo);
|
|
575
|
+
if (!researchTelemetryAllowed()) return url.href;
|
|
571
576
|
if (anonymousId) url.searchParams.set(HANDOFF_ID_KEY, anonymousId);
|
|
572
577
|
for (const [key, value] of Object.entries(attribution)) {
|
|
573
578
|
if (/^(utm_(source|medium|campaign|content|term)|twclid)$/.test(key))
|