@marimo-team/frontend 0.25.3-dev141 → 0.25.3-dev15

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.
Files changed (178) hide show
  1. package/dist/assets/{CellStatus-BP2mavAq.js → CellStatus-DVOHpdeJ.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-t8fH_TNc.js → ConnectedDataExplorerComponent-TprnxZeJ.js} +1 -1
  3. package/dist/assets/{ErrorBoundary-Gl5nCA8C.js → ErrorBoundary-CM13wrd8.js} +2 -2
  4. package/dist/assets/JsonOutput-Cx1iyibB.js +11 -0
  5. package/dist/assets/{LazyAnyLanguageCodeMirror-CKcCbG2G.js → LazyAnyLanguageCodeMirror-B4fCknq1.js} +2 -2
  6. package/dist/assets/MarimoErrorOutput-s_5GOX8k.js +10 -0
  7. package/dist/assets/{RenderHTML-BbOqmHy3.js → RenderHTML-DX6i99Op.js} +1 -1
  8. package/dist/assets/{RunButton-CK3LhnP5.js → RunButton-BKoh0zYG.js} +1 -1
  9. package/dist/assets/{add-cell-with-ai-8UBC0xwR.js → add-cell-with-ai-BpD_790A.js} +11 -11
  10. package/dist/assets/{add-connection-dialog-DXQnd6eB.js → add-connection-dialog-B1BXCjex.js} +2 -2
  11. package/dist/assets/{agent-panel-D7kMZLG-.js → agent-panel-CDFUc1uu.js} +5 -5
  12. package/dist/assets/ai-model-dropdown-i1vfGeVi.js +13 -0
  13. package/dist/assets/{any-language-editor-BLCAD3yx.js → any-language-editor-BdTWdMCI.js} +1 -1
  14. package/dist/assets/{app-config-button-BKEG4x9u.js → app-config-button-AdV-QDD7.js} +1 -1
  15. package/dist/assets/{blob-D5nfNHOo.js → blob-BG8yoQmx.js} +1 -1
  16. package/dist/assets/{cell-editor-ADVfycpN.js → cell-editor-BKJ06H5F.js} +9 -9
  17. package/dist/assets/cell-link-8Auigi8P.js +1 -0
  18. package/dist/assets/{cells-BRkCaSsh.js → cells-C6YGYGdi.js} +56 -56
  19. package/dist/assets/{chat-display-Dnagy4Nv.js → chat-display-DhgI2MS9.js} +1 -1
  20. package/dist/assets/{chat-panel-DQ6HkWEF.js → chat-panel-Cau71Ygr.js} +2 -2
  21. package/dist/assets/{chat-ui-Df8Vcj6n.js → chat-ui-C5ql1Up-.js} +1 -1
  22. package/dist/assets/code-visibility-BJImdpDi.js +1 -0
  23. package/dist/assets/coerce-DWjFeXOY.js +1 -0
  24. package/dist/assets/{column-preview-Cm2D6vyX.js → column-preview-BZ_iNhtJ.js} +1 -1
  25. package/dist/assets/{command-palette-DTSQ7gOC.js → command-palette-DDC3kBet.js} +1 -1
  26. package/dist/assets/{common-Cu6CDbuw.js → common-Sl3uthjg.js} +1 -1
  27. package/dist/assets/{components-CGw16R_N.js → components-3cou6Mka.js} +1 -1
  28. package/dist/assets/{components-CP_UoFtT.js → components-CskjK6xZ.js} +1 -1
  29. package/dist/assets/{components-CXfO-F47.js → components-YBmtV0p6.js} +1 -1
  30. package/dist/assets/{config-VPSq73n8.js → config-CA1V-wjh.js} +1 -1
  31. package/dist/assets/config-DRIpOKqh.js +1 -0
  32. package/dist/assets/config-Dy28fDwn.js +1 -0
  33. package/dist/assets/{datasource-Cq6x_5ML.js → datasource-DfbNb83e.js} +1 -1
  34. package/dist/assets/{dates-BbFQ2oE4.js → dates-CfmdTL6B.js} +1 -1
  35. package/dist/assets/{dependency-graph-panel--Kgtktcw.js → dependency-graph-panel-L5cBE5sl.js} +1 -1
  36. package/dist/assets/{documentation-panel-BHmbeznw.js → documentation-panel-D7S8JIc2.js} +1 -1
  37. package/dist/assets/{download-DCJXy66H.js → download-C03FOElq.js} +1 -1
  38. package/dist/assets/edit-page-D_Rg0gQO.js +9 -0
  39. package/dist/assets/{error-banner-Cd69vvyX.js → error-banner-COZ7SfYV.js} +1 -1
  40. package/dist/assets/{error-entries-Dk3VZ-OK.js → error-entries-CLnPDv7b.js} +1 -1
  41. package/dist/assets/{error-panel-BPRYmC5J.js → error-panel-D2xrYLue.js} +1 -1
  42. package/dist/assets/{errors-DCrsa1nH.js → errors-CNsgAw6m.js} +1 -1
  43. package/dist/assets/{feedback-button-Bik2-e33.js → feedback-button-DzPunIqU.js} +2 -2
  44. package/dist/assets/feedback-button-Kla7i5RT.js +1 -0
  45. package/dist/assets/{file-explorer-panel-BEEK5lcl.js → file-explorer-panel-Uk4_QIJQ.js} +1 -1
  46. package/dist/assets/{file-name-input-Cdc-TVqO.js → file-name-input-B4fRaQkI.js} +1 -1
  47. package/dist/assets/{floating-outline-XD9FAV-f.js → floating-outline-B5MaM1JS.js} +1 -1
  48. package/dist/assets/{gallery-page-Dm6mGwBi.js → gallery-page-BefvdsM7.js} +1 -1
  49. package/dist/assets/{glide-data-editor-J9CAb70d.js → glide-data-editor-C3eaYlXg.js} +1 -1
  50. package/dist/assets/{home-page-DMHnsRxm.js → home-page-hmvKlc1w.js} +1 -1
  51. package/dist/assets/{hooks-93IwHd2u.js → hooks-DzML9nez.js} +1 -1
  52. package/dist/assets/index-6b4mf8Ai.css +2 -0
  53. package/dist/assets/index-ptK1gxmo.js +30 -0
  54. package/dist/assets/{layout-DmcNEu3P.js → layout-Ck1RoL1B.js} +5 -5
  55. package/dist/assets/{logs-panel-ABM16htT.js → logs-panel-BRytaWaO.js} +1 -1
  56. package/dist/assets/{markdown-renderer-BG3sp2rs.js → markdown-renderer-DX0Xrrfy.js} +1 -1
  57. package/dist/assets/{mermaid-a3xYymTy.js → mermaid-C4EiVqcd.js} +1 -1
  58. package/dist/assets/{name-cell-input-BgEBmqyL.js → name-cell-input-DlpTvPLa.js} +1 -1
  59. package/dist/assets/{outline-panel-DCXQ3_F6.js → outline-panel-B2WIpz-1.js} +1 -1
  60. package/dist/assets/{packages-panel-BMGOmZkR.js → packages-panel-CI5ff9b-.js} +1 -1
  61. package/dist/assets/{panel-accordion-state-C1sdPp0m.js → panel-accordion-state-BqSH5ttk.js} +1 -1
  62. package/dist/assets/panels-BCcZ_yLK.js +107 -0
  63. package/dist/assets/{process-output-D0KGq04R.js → process-output-f3C3PD0Z.js} +1 -1
  64. package/dist/assets/{readonly-code-display-Do50PHI8.js → readonly-code-display-MnMEoYW5.js} +1 -1
  65. package/dist/assets/{readonly-python-code-DCSMIsTX.js → readonly-python-code-ggs4hAzC.js} +1 -1
  66. package/dist/assets/{renderShortcut-BkVJQ_Zh.js → renderShortcut-C1JwYcqW.js} +1 -1
  67. package/dist/assets/{reveal-component-ltaepAqw.js → reveal-component-PiV1eQk9.js} +1 -1
  68. package/dist/assets/run-page-AfZhtEh1.js +1 -0
  69. package/dist/assets/{runtime-details-state-CSPobEdR.js → runtime-details-state-CoL-p0MC.js} +1 -1
  70. package/dist/assets/{schemas-Dv42wLFq.js → schemas-ChRqMOTL.js} +1 -1
  71. package/dist/assets/{scratchpad-panel-Dwd6W5PE.js → scratchpad-panel-D2rWg4k8.js} +1 -1
  72. package/dist/assets/{secrets-panel-Bctbtkrp.js → secrets-panel-D7KN4tVs.js} +1 -1
  73. package/dist/assets/session-panel-CnANhcTo.js +1 -0
  74. package/dist/assets/{snippets-panel-Bh1oTw4m.js → snippets-panel-ClGHtEKQ.js} +1 -1
  75. package/dist/assets/state-CbjBtkdd.js +3 -0
  76. package/dist/assets/{state-XsPO8hNi.js → state-DtGB7xeJ.js} +1 -1
  77. package/dist/assets/{terminal-Ck_vK-34.js → terminal-wnSHYT8N.js} +1 -1
  78. package/dist/assets/{tracing-Di6pUmX8.js → tracing-Dz2rYOFL.js} +1 -1
  79. package/dist/assets/{tracing-panel-PeRXHD8_.js → tracing-panel-DqQY9V91.js} +2 -2
  80. package/dist/assets/{tree-actions-GM5E_bUs.js → tree-actions-DnUokmva.js} +1 -1
  81. package/dist/assets/{useAddCell-GR7eEQrT.js → useAddCell-IN24thff.js} +1 -1
  82. package/dist/assets/{useBoolean-BDD6_xQQ.js → useBoolean-d0Tty94N.js} +1 -1
  83. package/dist/assets/{useCellActionButton-B-9eG5z_.js → useCellActionButton-DmaFZ4oF.js} +1 -1
  84. package/dist/assets/{useDeleteCell-2_bMClHd.js → useDeleteCell-fQlM46Y2.js} +1 -1
  85. package/dist/assets/{useDependencyPanelTab-k3C3M18S.js → useDependencyPanelTab-ImXYINm_.js} +1 -1
  86. package/dist/assets/{useInstallPackage-iX1eufdl.js → useInstallPackage-BW06eter.js} +1 -1
  87. package/dist/assets/{useNotebookActions-NHN6A-cN.js → useNotebookActions-DHt3s-ia.js} +1 -1
  88. package/dist/assets/{useRunCells-B2vUhREg.js → useRunCells-DSJPXE-j.js} +1 -1
  89. package/dist/assets/{useSplitCell-DEb03htp.js → useSplitCell-DQyMF5gd.js} +1 -1
  90. package/dist/assets/{useTheme-COhSHkCj.js → useTheme-n8Dj1zH7.js} +1 -1
  91. package/dist/assets/{vega-component-CnadTgoE.js → vega-component-IouMe13t.js} +1 -1
  92. package/dist/index.html +34 -35
  93. package/package.json +5 -2
  94. package/src/__tests__/fixtures/{pair-preview.ts → pair-config.ts} +3 -2
  95. package/src/__tests__/host-imports.test.ts +100 -0
  96. package/src/__tests__/mount.test.ts +28 -8
  97. package/src/components/data-table/__tests__/context-menu.test.ts +176 -0
  98. package/src/components/data-table/__tests__/date-filter-inputs.test.tsx +24 -1
  99. package/src/components/data-table/__tests__/export-actions.test.tsx +329 -6
  100. package/src/components/data-table/context-menu.tsx +125 -26
  101. package/src/components/data-table/date-filter-inputs.tsx +15 -42
  102. package/src/components/data-table/export-actions.tsx +192 -116
  103. package/src/components/data-table/schemas.ts +14 -36
  104. package/src/components/data-table/utils.ts +18 -0
  105. package/src/components/editor/Output.tsx +9 -2
  106. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +80 -252
  107. package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +186 -34
  108. package/src/components/editor/actions/pair-with-agent-commands.ts +42 -51
  109. package/src/components/editor/actions/pair-with-agent-modal.tsx +96 -36
  110. package/src/components/editor/chrome/panels/error-panel.tsx +1 -0
  111. package/src/components/editor/chrome/wrapper/__tests__/attachment-status.test.tsx +372 -0
  112. package/src/components/editor/chrome/wrapper/footer-item.tsx +32 -24
  113. package/src/components/editor/chrome/wrapper/footer-items/attachment-status.tsx +237 -0
  114. package/src/components/editor/chrome/wrapper/footer.tsx +2 -0
  115. package/src/components/editor/errors/__tests__/send-error-report-button.test.tsx +548 -0
  116. package/src/components/editor/errors/send-error-report-button.tsx +69 -0
  117. package/src/components/editor/output/MarimoErrorOutput.tsx +21 -5
  118. package/src/components/editor/output/MarimoTracebackOutput.tsx +35 -20
  119. package/src/components/editor/output/__tests__/ansi-reduce.test.ts +18 -0
  120. package/src/components/editor/output/ansi-reduce.ts +6 -0
  121. package/src/core/attachments/__tests__/toast.test.tsx +58 -0
  122. package/src/core/attachments/state.ts +21 -0
  123. package/src/core/attachments/toast.ts +15 -0
  124. package/src/core/cells/__tests__/cells.test.ts +52 -0
  125. package/src/core/cells/__tests__/error-report.test.ts +139 -0
  126. package/src/core/cells/__tests__/session.test.ts +50 -1
  127. package/src/core/cells/error-report.ts +63 -0
  128. package/src/core/cells/session.ts +28 -1
  129. package/src/core/config/pair.ts +5 -3
  130. package/src/core/edit-app.tsx +2 -2
  131. package/src/core/host/AGENTS.md +6 -0
  132. package/src/core/host/__tests__/events.test.ts +46 -0
  133. package/src/core/host/__tests__/notebook-client.test.ts +191 -0
  134. package/src/core/host/__tests__/protocol.test.ts +214 -0
  135. package/src/core/host/connection.ts +81 -0
  136. package/src/core/host/events.ts +60 -0
  137. package/src/core/host/notebook-client.ts +226 -0
  138. package/src/core/host/protocol.ts +1943 -0
  139. package/src/core/islands/__tests__/bootstrap.test.ts +26 -0
  140. package/src/core/islands/bootstrap.ts +1 -0
  141. package/src/core/run-app.tsx +2 -2
  142. package/src/core/runtime/__tests__/runtime.test.ts +55 -11
  143. package/src/core/runtime/runtime.ts +14 -1
  144. package/src/core/runtime/types.ts +2 -0
  145. package/src/core/websocket/__tests__/{useMarimoKernelConnection.test.ts → connection-state.test.ts} +15 -17
  146. package/src/core/websocket/__tests__/{useWebSocket.test.ts → createConnectionTransport.test.ts} +1 -1
  147. package/src/core/websocket/__tests__/useNotebookClient.hook.test.tsx +140 -0
  148. package/src/core/websocket/__tests__/{useMarimoKernelConnection.hook.test.tsx → useNotebookSession.hook.test.tsx} +352 -65
  149. package/src/core/websocket/connection-state.ts +70 -0
  150. package/src/core/websocket/transports/__tests__/sse.test.ts +1 -4
  151. package/src/core/websocket/transports/create.ts +31 -0
  152. package/src/core/websocket/transports/transport.ts +12 -23
  153. package/src/core/websocket/types.ts +9 -39
  154. package/src/core/websocket/useNotebookClient.ts +80 -0
  155. package/src/core/websocket/{useMarimoKernelConnection.tsx → useNotebookSession.tsx} +67 -225
  156. package/src/mount.tsx +7 -3
  157. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +84 -0
  158. package/src/utils/__tests__/dates.test.ts +116 -0
  159. package/src/utils/dates.ts +94 -0
  160. package/dist/assets/JsonOutput-D6HIIsCb.js +0 -11
  161. package/dist/assets/MarimoErrorOutput-D60XkCny.js +0 -6
  162. package/dist/assets/ai-model-dropdown-B0z6-zhp.js +0 -5
  163. package/dist/assets/api-BeC_VSGv.js +0 -1
  164. package/dist/assets/cell-link-LSth_8hT.js +0 -1
  165. package/dist/assets/code-visibility-B-_GvwR5.js +0 -1
  166. package/dist/assets/coerce-CpE6kUdX.js +0 -1
  167. package/dist/assets/config-BOKzA3tF.js +0 -1
  168. package/dist/assets/config-DX8Y2WbJ.js +0 -1
  169. package/dist/assets/edit-page-ChcSgpke.js +0 -9
  170. package/dist/assets/feedback-button-B2gKC5cn.js +0 -1
  171. package/dist/assets/index-Bcdzex-3.css +0 -2
  172. package/dist/assets/index-s-M1OXjs.js +0 -29
  173. package/dist/assets/pair-CaQyK6En.js +0 -1
  174. package/dist/assets/panels-CxVG8-v2.js +0 -4
  175. package/dist/assets/run-page-DF3c5cDk.js +0 -1
  176. package/dist/assets/session-panel-VdDhEBa-.js +0 -1
  177. package/dist/assets/state-_Qai_QyX.js +0 -3
  178. package/src/core/websocket/useWebSocket.tsx +0 -88
@@ -0,0 +1,226 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { Logger } from "@/utils/Logger";
4
+ import { type Atom, atom, type createStore } from "jotai/vanilla";
5
+ import {
6
+ type ConnectionStatus,
7
+ ConnectionState,
8
+ ConnectionClosedReason,
9
+ type CloseDecision,
10
+ type NotebookTransport,
11
+ TransportReadyState,
12
+ } from "./connection";
13
+ import { parseNotebookEvent } from "./events";
14
+
15
+ /** A connection to a notebook on a marimo host. */
16
+ export interface NotebookClient {
17
+ /** Transport state, independent of kernel readiness. */
18
+ readonly connectionAtom: Atom<ConnectionStatus>;
19
+ /** Attempt to restore a closed connection after checking host health. */
20
+ reconnect(): Promise<void>;
21
+ }
22
+
23
+ /** The transport and application callbacks needed to connect a notebook. */
24
+ export interface NotebookConnection {
25
+ /** Create a transport that reads the URL again on each connection attempt. */
26
+ createTransport: (url: () => string) => NotebookTransport;
27
+ /** The current stream URL, including authentication and subscription options. */
28
+ url: () => string;
29
+ /** Host events require an intact stream; legacy notifications are independent. */
30
+ messageFormat: "host" | "session";
31
+ /** Abort to close the transport and clear the client's state. */
32
+ signal: AbortSignal;
33
+ /** Wait until the host can accept the initial connection. */
34
+ waitUntilReady: () => Promise<void>;
35
+ /** Check whether the host is reachable before an explicit reconnect. */
36
+ checkHealth: () => Promise<boolean>;
37
+ /** Decode wire text without interpreting its event type. */
38
+ decodeJson: (message: string) => unknown;
39
+ /** Handle a native marimo notification. Its payload has not been validated. */
40
+ onNotification: (notification: unknown) => void;
41
+ /** Report a malformed message without coupling the client to editor UI. */
42
+ onMessageError: (error: unknown) => void;
43
+ /** Choose the connection status and retry policy after the transport closes. */
44
+ classifyClose: (event: CloseEvent) => CloseDecision;
45
+ }
46
+
47
+ /** Create a client without opening a connection. */
48
+ export function createNotebookClient(store: ReturnType<typeof createStore>) {
49
+ const connectionAtom = atom<ConnectionStatus>({
50
+ state: ConnectionState.NOT_STARTED,
51
+ });
52
+ let reconnect: (() => Promise<void>) | undefined;
53
+ const client: NotebookClient = {
54
+ connectionAtom,
55
+ reconnect: async () => reconnect?.(),
56
+ };
57
+
58
+ function connect({
59
+ createTransport,
60
+ url,
61
+ messageFormat,
62
+ signal,
63
+ waitUntilReady,
64
+ checkHealth,
65
+ onNotification,
66
+ onMessageError,
67
+ decodeJson,
68
+ classifyClose,
69
+ }: NotebookConnection) {
70
+ if (signal.aborted) {
71
+ return;
72
+ }
73
+ let shouldRetry = true;
74
+ let terminal = false;
75
+ let checkingHealth = false;
76
+ const transport = createTransport(url);
77
+ const setStatus = (status: ConnectionStatus) =>
78
+ store.set(connectionAtom, status);
79
+ const disconnected = {
80
+ state: ConnectionState.CLOSED,
81
+ code: ConnectionClosedReason.KERNEL_DISCONNECTED,
82
+ reason: "kernel not found",
83
+ } satisfies ConnectionStatus;
84
+
85
+ function retry(code?: number, reason?: string) {
86
+ if (!signal.aborted && !terminal && shouldRetry) {
87
+ shouldRetry = false;
88
+ transport.reconnect(code, reason);
89
+ }
90
+ }
91
+
92
+ function onOpen() {
93
+ if (signal.aborted || terminal) {
94
+ return;
95
+ }
96
+ shouldRetry = true;
97
+ setStatus({ state: ConnectionState.OPEN });
98
+ }
99
+
100
+ function onClose(event: CloseEvent) {
101
+ if (signal.aborted || terminal) {
102
+ return;
103
+ }
104
+ Logger.warn("Notebook connection closed", event.code, event.reason);
105
+ const decision = classifyClose(event);
106
+ setStatus(decision.status);
107
+ if (decision.kind === "terminal") {
108
+ terminal = true;
109
+ transport.close();
110
+ } else if (decision.kind === "retry") {
111
+ retry(event.code, event.reason);
112
+ } else {
113
+ terminal = true;
114
+ }
115
+ }
116
+
117
+ function onError(event: Event) {
118
+ if (signal.aborted || terminal) {
119
+ return;
120
+ }
121
+ Logger.warn("Notebook connection error", event);
122
+ setStatus(disconnected);
123
+ retry();
124
+ }
125
+
126
+ function onMessage(message: MessageEvent<string>) {
127
+ if (signal.aborted || terminal) {
128
+ return;
129
+ }
130
+ let event;
131
+ try {
132
+ event = parseNotebookEvent(decodeJson(message.data));
133
+ } catch (error) {
134
+ Logger.error("Failed to decode notebook message", error);
135
+ if (messageFormat === "session") {
136
+ onMessageError(error);
137
+ return;
138
+ }
139
+ terminal = true;
140
+ setStatus({
141
+ ...disconnected,
142
+ reason: "Failed to decode notebook message",
143
+ });
144
+ transport.close();
145
+ return;
146
+ }
147
+ if (event.event === "marimo") {
148
+ onNotification(event.data.marimo);
149
+ }
150
+ }
151
+
152
+ reconnect = async () => {
153
+ if (
154
+ signal.aborted ||
155
+ checkingHealth ||
156
+ transport.readyState === TransportReadyState.OPEN ||
157
+ transport.readyState === TransportReadyState.CONNECTING
158
+ ) {
159
+ return;
160
+ }
161
+ checkingHealth = true;
162
+ setStatus({ state: ConnectionState.CONNECTING });
163
+ try {
164
+ const healthy = await checkHealth();
165
+ if (signal.aborted) {
166
+ return;
167
+ }
168
+ if (!healthy) {
169
+ shouldRetry = false;
170
+ setStatus(disconnected);
171
+ return;
172
+ }
173
+ terminal = false;
174
+ shouldRetry = true;
175
+ transport.reconnect();
176
+ } catch (error) {
177
+ if (!signal.aborted) {
178
+ Logger.error("Notebook health check failed", error);
179
+ shouldRetry = false;
180
+ setStatus(disconnected);
181
+ }
182
+ } finally {
183
+ checkingHealth = false;
184
+ }
185
+ };
186
+
187
+ signal.addEventListener(
188
+ "abort",
189
+ () => {
190
+ transport.removeEventListener("open", onOpen);
191
+ transport.removeEventListener("close", onClose);
192
+ transport.removeEventListener("error", onError);
193
+ transport.removeEventListener("message", onMessage);
194
+ transport.close();
195
+ reconnect = undefined;
196
+ setStatus({ state: ConnectionState.NOT_STARTED });
197
+ },
198
+ { once: true },
199
+ );
200
+
201
+ transport.addEventListener("open", onOpen);
202
+ transport.addEventListener("close", onClose);
203
+ transport.addEventListener("error", onError);
204
+ transport.addEventListener("message", onMessage);
205
+
206
+ if (transport.readyState === TransportReadyState.CLOSED) {
207
+ setStatus({ state: ConnectionState.CONNECTING });
208
+ void waitUntilReady()
209
+ .then(() => {
210
+ if (!signal.aborted) {
211
+ transport.reconnect();
212
+ }
213
+ })
214
+ .catch((error) => {
215
+ if (!signal.aborted) {
216
+ Logger.error("Healthy connection never made", error);
217
+ terminal = true;
218
+ setStatus(disconnected);
219
+ transport.close();
220
+ }
221
+ });
222
+ }
223
+ }
224
+
225
+ return { client, connect };
226
+ }