@daytona/sdk 0.198.0-alpha.1 → 0.199.0-alpha.1

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.
@@ -1,398 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright Daytona Platforms Inc.
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.EventDispatcher = void 0;
8
- const socket_io_client_1 = require("socket.io-client");
9
- /**
10
- * Extracts the resource ID from an event payload.
11
- *
12
- * Handles two payload shapes:
13
- * - Wrapper: {sandbox: {id: ...}, ...} -> nested resource ID
14
- * - Direct: {id: ...} -> top-level ID
15
- */
16
- function extractIdFromEvent(data) {
17
- if (!data || typeof data !== 'object')
18
- return undefined;
19
- for (const key of ['sandbox', 'volume', 'snapshot', 'runner']) {
20
- const nested = data[key];
21
- if (nested && typeof nested === 'object' && typeof nested.id === 'string') {
22
- return nested.id;
23
- }
24
- }
25
- if (typeof data.id === 'string') {
26
- return data.id;
27
- }
28
- return undefined;
29
- }
30
- /**
31
- * Manages a Socket.IO connection to the Daytona notification gateway
32
- * and dispatches resource events to per-resource handlers.
33
- */
34
- class EventDispatcher {
35
- apiUrl;
36
- token;
37
- organizationId;
38
- source;
39
- sdkVersion;
40
- socket;
41
- _connected = false;
42
- _closed = false;
43
- _failed = false;
44
- _failError = null;
45
- listeners = new Map();
46
- registeredEvents = new Set();
47
- connectPromise = null;
48
- ensureConnectPromise = null;
49
- reconnectAttempts = 0;
50
- maxReconnectAttempts = 10;
51
- // Cleared on connect/error/disconnect to prevent late state mutation.
52
- _connectTimer = null;
53
- disconnectTimer = null;
54
- disconnectGeneration = 0;
55
- static DISCONNECT_DELAY_MS = 30_000;
56
- // Set once on the first Manager 'open' by capability probe, not runtime name.
57
- // `undefined` (pre-connect) is treated as `false` → ephemeral disconnect.
58
- supportsBackgroundUnref = undefined;
59
- constructor(apiUrl, token, organizationId, source, sdkVersion) {
60
- this.apiUrl = apiUrl;
61
- this.token = token;
62
- this.organizationId = organizationId;
63
- this.source = source;
64
- this.sdkVersion = sdkVersion;
65
- }
66
- /**
67
- * Idempotent: ensure a connection attempt is in progress or already established.
68
- *
69
- * Non-blocking. Fires-and-forgets a connect() call via a stored promise if not
70
- * already connected and no attempt is currently running.
71
- */
72
- ensureConnected() {
73
- // No-op after disconnect — prevents socket resurrection.
74
- if (this._closed)
75
- return;
76
- if (this._connected)
77
- return;
78
- if (this.connectPromise)
79
- return;
80
- if (this.ensureConnectPromise)
81
- return;
82
- this.ensureConnectPromise = this.connect()
83
- .catch(() => {
84
- // Callers check isConnected when they need it
85
- })
86
- .finally(() => {
87
- this.ensureConnectPromise = null;
88
- });
89
- }
90
- /**
91
- * Establishes the Socket.IO connection. Resolves when connected.
92
- * Throws if the connection fails within the timeout.
93
- */
94
- async connect(timeoutMs = 5000) {
95
- if (this._closed) {
96
- return;
97
- }
98
- if (this._connected && this.socket) {
99
- return;
100
- }
101
- if (this.connectPromise) {
102
- return this.connectPromise;
103
- }
104
- this.connectPromise = this.doConnect(timeoutMs);
105
- try {
106
- await this.connectPromise;
107
- if (this.listeners.size === 0) {
108
- this.scheduleDelayedDisconnect();
109
- }
110
- }
111
- catch (error) {
112
- if (this.listeners.size === 0) {
113
- // Stop retries if nobody is listening.
114
- this.socket?.disconnect();
115
- }
116
- throw error;
117
- }
118
- finally {
119
- this.connectPromise = null;
120
- }
121
- }
122
- doConnect(timeoutMs) {
123
- return new Promise((resolve, reject) => {
124
- if (this.socket) {
125
- this.socket.removeAllListeners();
126
- this.socket.disconnect();
127
- this.socket = undefined;
128
- }
129
- // Derive path from the API URL so reverse-proxy prefixes are preserved (not hardcoded /api).
130
- const url = new URL(this.apiUrl);
131
- const origin = url.origin;
132
- const socketPath = `${url.pathname.replace(/\/$/, '')}/socket.io/`;
133
- const query = {};
134
- if (this.organizationId) {
135
- query.organizationId = this.organizationId;
136
- }
137
- if (this.source) {
138
- query.source = this.source;
139
- }
140
- if (this.sdkVersion) {
141
- query.sdkVersion = this.sdkVersion;
142
- }
143
- this.socket = (0, socket_io_client_1.io)(origin, {
144
- path: socketPath,
145
- autoConnect: false,
146
- transports: ['websocket'],
147
- query,
148
- reconnection: true,
149
- reconnectionAttempts: this.maxReconnectAttempts,
150
- reconnectionDelay: 1000,
151
- reconnectionDelayMax: 30000,
152
- });
153
- this.socket.auth = { token: this.token };
154
- this.clearConnectTimer();
155
- this._connectTimer = setTimeout(() => {
156
- if (!this._connected) {
157
- this.socket?.disconnect();
158
- this.clearConnectTimer();
159
- this._failed = true;
160
- this._failError = 'WebSocket connection timed out';
161
- reject(new Error(this._failError));
162
- }
163
- }, timeoutMs);
164
- if (typeof this._connectTimer.unref === 'function') {
165
- this._connectTimer.unref();
166
- }
167
- this.socket.on('connect', () => {
168
- this.clearConnectTimer();
169
- this._connected = true;
170
- this._failed = false;
171
- this._failError = null;
172
- this.reconnectAttempts = 0;
173
- resolve();
174
- });
175
- this.socket.on('connect_error', (err) => {
176
- if (!this._connected) {
177
- this.clearConnectTimer();
178
- this._failed = true;
179
- this._failError = `WebSocket connection failed: ${err.message}`;
180
- reject(new Error(this._failError));
181
- }
182
- });
183
- this.socket.on('disconnect', (reason) => {
184
- this._connected = false;
185
- if (reason === 'io server disconnect') {
186
- // Server initiated disconnect - try to reconnect
187
- this.socket?.connect();
188
- }
189
- });
190
- this.socket.io.on('reconnect', () => {
191
- this._connected = true;
192
- this._failed = false;
193
- this._failError = null;
194
- this.reconnectAttempts = 0;
195
- });
196
- this.socket.io.on('reconnect_attempt', () => {
197
- this.reconnectAttempts++;
198
- });
199
- this.socket.io.on('reconnect_failed', () => {
200
- this._connected = false;
201
- this._failed = true;
202
- this._failError = `WebSocket reconnection failed after ${this.maxReconnectAttempts} attempts`;
203
- });
204
- // Fires before engine.io's first _resetPingTimeout(), so enabling autoUnref here
205
- // also covers the initial + recurring ping timers and reconnect timers.
206
- this.socket.io.on('open', () => {
207
- this.applyUnrefCapability();
208
- });
209
- // Re-register any events that were added before the socket was created
210
- const pendingEvents = [...this.registeredEvents];
211
- this.registeredEvents.clear();
212
- this.registerEvents(pendingEvents);
213
- this.socket.connect();
214
- });
215
- }
216
- /**
217
- * Registers Socket.IO event handlers (idempotent -- each event is registered once).
218
- */
219
- registerEvents(events) {
220
- for (const eventName of events) {
221
- if (this.registeredEvents.has(eventName)) {
222
- continue;
223
- }
224
- this.registeredEvents.add(eventName);
225
- // If socket isn't created yet, the event will be registered when connect() runs
226
- if (!this.socket)
227
- continue;
228
- const handler = (data) => {
229
- const resourceId = extractIdFromEvent(data);
230
- if (resourceId) {
231
- this.dispatch(resourceId, eventName, data);
232
- }
233
- };
234
- this.socket.on(eventName, handler);
235
- }
236
- }
237
- /**
238
- * Registers a handler for events targeting a specific resource.
239
- * Returns an unsubscribe function.
240
- *
241
- * @param resourceId - The ID of the resource (e.g. sandbox ID).
242
- * @param handler - Callback receiving (eventName, rawData).
243
- * @param events - List of Socket.IO event names to listen for.
244
- */
245
- subscribe(resourceId, handler, events) {
246
- // No-op after disconnect — prevents socket resurrection.
247
- if (this._closed) {
248
- return () => {
249
- return;
250
- };
251
- }
252
- this.cancelDelayedDisconnect();
253
- this.disconnectGeneration++;
254
- this.ensureConnected();
255
- if (!this.listeners.has(resourceId)) {
256
- this.listeners.set(resourceId, new Set());
257
- }
258
- this.listeners.get(resourceId).add(handler);
259
- // Register any new events with the Socket.IO client
260
- this.registerEvents(events);
261
- return () => {
262
- const handlers = this.listeners.get(resourceId);
263
- if (handlers) {
264
- handlers.delete(handler);
265
- if (handlers.size === 0) {
266
- this.listeners.delete(resourceId);
267
- }
268
- }
269
- // Schedule delayed disconnect when no resources are listening anymore
270
- if (this.listeners.size === 0) {
271
- this.scheduleDelayedDisconnect();
272
- }
273
- };
274
- }
275
- /** Whether the WebSocket is currently connected */
276
- get isConnected() {
277
- return this._connected;
278
- }
279
- /** Whether the WebSocket has permanently failed (exhausted reconnection attempts) */
280
- get isFailed() {
281
- return this._failed;
282
- }
283
- /** The error message if the connection has failed */
284
- get failError() {
285
- return this._failError;
286
- }
287
- /** Disconnects and cleans up all resources */
288
- disconnect() {
289
- this._closed = true;
290
- this.cancelDelayedDisconnect();
291
- this.clearConnectTimer();
292
- this.connectPromise = null;
293
- this.ensureConnectPromise = null;
294
- this.disconnectSocket();
295
- }
296
- disconnectSocket() {
297
- if (this.socket) {
298
- this.socket.removeAllListeners();
299
- this.socket.disconnect();
300
- this.socket = undefined;
301
- }
302
- this._connected = false;
303
- this.listeners.clear();
304
- this.registeredEvents.clear();
305
- }
306
- /**
307
- * Decides, by capability rather than runtime name, whether this runtime can keep a
308
- * background socket open without blocking process exit.
309
- *
310
- * A runtime qualifies only if it can unref BOTH the transport's raw socket AND timers:
311
- * Node/Deno (ws package exposes `_socket`, timers are objects) qualify; Bun (native
312
- * WebSocket has no `_socket`) and browsers (timers are numbers, no `_socket`) do not.
313
- *
314
- * When it qualifies, this unrefs the current connection's socket (engine.io skipped it —
315
- * autoUnref was off during the transport's onopen) and enables engine.io's own autoUnref
316
- * so it keeps every later ping-timeout and reconnect timer unref'd. When it does not,
317
- * autoUnref stays off (avoiding the `ws._socket.unref()` and number-timer crashes) and
318
- * the socket is dropped the instant it goes idle (see scheduleDelayedDisconnect).
319
- */
320
- applyUnrefCapability() {
321
- const manager = this.socket?.io;
322
- // Known-unsupported runtime: nothing to unref; ephemeral disconnect handles exit.
323
- if (this.supportsBackgroundUnref === false)
324
- return;
325
- // Re-apply per Manager: an idle disconnect replaces the socket with a fresh manager
326
- // whose autoUnref is off, so skip only when this manager already has it applied.
327
- if (this.supportsBackgroundUnref === true && manager?.opts?.autoUnref === true)
328
- return;
329
- try {
330
- const engine = manager?.engine;
331
- const rawSocket = engine?.transport?.ws?._socket;
332
- const socketUnrefable = !!rawSocket && typeof rawSocket.unref === 'function';
333
- const probe = setTimeout(() => undefined, 0);
334
- const timerUnrefable = typeof probe?.unref === 'function';
335
- clearTimeout(probe);
336
- if (socketUnrefable && timerUnrefable) {
337
- rawSocket.unref();
338
- engine.opts.autoUnref = true;
339
- manager.opts.autoUnref = true;
340
- this.supportsBackgroundUnref = true;
341
- }
342
- else if (this.supportsBackgroundUnref === undefined) {
343
- this.supportsBackgroundUnref = false;
344
- }
345
- }
346
- catch {
347
- if (this.supportsBackgroundUnref === undefined)
348
- this.supportsBackgroundUnref = false;
349
- }
350
- }
351
- dispatch(resourceId, eventName, data) {
352
- if (!resourceId)
353
- return;
354
- const handlers = this.listeners.get(resourceId);
355
- if (handlers) {
356
- for (const handler of handlers) {
357
- try {
358
- handler(eventName, data);
359
- }
360
- catch {
361
- // Don't let a handler error break other handlers
362
- }
363
- }
364
- }
365
- }
366
- cancelDelayedDisconnect() {
367
- if (this.disconnectTimer) {
368
- clearTimeout(this.disconnectTimer);
369
- this.disconnectTimer = null;
370
- }
371
- }
372
- clearConnectTimer() {
373
- if (this._connectTimer) {
374
- clearTimeout(this._connectTimer);
375
- this._connectTimer = null;
376
- }
377
- }
378
- scheduleDelayedDisconnect() {
379
- this.cancelDelayedDisconnect();
380
- const generation = this.disconnectGeneration;
381
- // Where the socket can't be unref'd (Bun/browser), an open idle socket keeps the
382
- // event loop alive, so drop it immediately; elsewhere keep it warm for reuse.
383
- const delay = this.supportsBackgroundUnref === true ? EventDispatcher.DISCONNECT_DELAY_MS : 0;
384
- this.disconnectTimer = setTimeout(() => {
385
- if (generation !== this.disconnectGeneration) {
386
- return;
387
- }
388
- if (this.listeners.size === 0) {
389
- this.disconnectSocket();
390
- }
391
- }, delay);
392
- if (typeof this.disconnectTimer.unref === 'function') {
393
- this.disconnectTimer.unref();
394
- }
395
- }
396
- }
397
- exports.EventDispatcher = EventDispatcher;
398
- //# sourceMappingURL=EventDispatcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EventDispatcher.js","sourceRoot":"","sources":["../../../../../sdk-typescript/src/utils/EventDispatcher.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import { EventDispatcher, type EventHandler } from './EventDispatcher';
2
- export declare class EventSubscriptionManager {
3
- private readonly dispatcher;
4
- private static readonly SUBSCRIPTION_TTL;
5
- private readonly subscriptions;
6
- private _closed;
7
- constructor(dispatcher: EventDispatcher | null);
8
- subscribe(resourceId: string, handler: EventHandler, events: string[]): string;
9
- refresh(subId: string): boolean;
10
- unsubscribe(subId: string): void;
11
- shutdown(): void;
12
- private createTimer;
13
- }
14
- //# sourceMappingURL=EventSubscriptionManager.d.ts.map
@@ -1,98 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright Daytona Platforms Inc.
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.EventSubscriptionManager = void 0;
8
- function createSubscriptionId() {
9
- // Browser-safe UUID generation.
10
- if (typeof globalThis.crypto?.randomUUID === 'function') {
11
- return globalThis.crypto.randomUUID();
12
- }
13
- const randomHex = () => Math.floor(Math.random() * 0xffffffff)
14
- .toString(16)
15
- .padStart(8, '0');
16
- return `${randomHex()}${randomHex()}${randomHex()}${randomHex()}`;
17
- }
18
- class EventSubscriptionManager {
19
- dispatcher;
20
- static SUBSCRIPTION_TTL = 300;
21
- subscriptions = new Map();
22
- _closed = false;
23
- constructor(dispatcher) {
24
- this.dispatcher = dispatcher;
25
- }
26
- subscribe(resourceId, handler, events) {
27
- // No-op when shut down or when streaming is disabled (no dispatcher) — callers poll.
28
- if (this._closed || !this.dispatcher) {
29
- return '';
30
- }
31
- const subId = createSubscriptionId();
32
- const unsubscribe = this.dispatcher.subscribe(resourceId, handler, events);
33
- try {
34
- if (this._closed) {
35
- throw new Error('EventSubscriptionManager is closed');
36
- }
37
- this.subscriptions.set(subId, {
38
- unsubscribe,
39
- timer: this.createTimer(subId),
40
- });
41
- return subId;
42
- }
43
- catch (error) {
44
- // Rollback dispatcher subscription on failure.
45
- unsubscribe();
46
- if (this._closed) {
47
- return '';
48
- }
49
- throw error;
50
- }
51
- }
52
- refresh(subId) {
53
- // Reject operations after shutdown to prevent use-after-close.
54
- if (this._closed) {
55
- return false;
56
- }
57
- const subscription = this.subscriptions.get(subId);
58
- if (!subscription) {
59
- return false;
60
- }
61
- clearTimeout(subscription.timer);
62
- subscription.timer = this.createTimer(subId);
63
- return true;
64
- }
65
- unsubscribe(subId) {
66
- const subscription = this.subscriptions.get(subId);
67
- if (!subscription) {
68
- return;
69
- }
70
- clearTimeout(subscription.timer);
71
- this.subscriptions.delete(subId);
72
- subscription.unsubscribe();
73
- }
74
- shutdown() {
75
- this._closed = true;
76
- for (const [subId, subscription] of this.subscriptions) {
77
- clearTimeout(subscription.timer);
78
- this.subscriptions.delete(subId);
79
- subscription.unsubscribe();
80
- }
81
- }
82
- createTimer(subId) {
83
- const timer = setTimeout(() => {
84
- const subscription = this.subscriptions.get(subId);
85
- if (!subscription || subscription.timer !== timer) {
86
- return;
87
- }
88
- this.subscriptions.delete(subId);
89
- subscription.unsubscribe();
90
- }, EventSubscriptionManager.SUBSCRIPTION_TTL * 1000);
91
- if (typeof timer.unref === 'function') {
92
- timer.unref();
93
- }
94
- return timer;
95
- }
96
- }
97
- exports.EventSubscriptionManager = EventSubscriptionManager;
98
- //# sourceMappingURL=EventSubscriptionManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EventSubscriptionManager.js","sourceRoot":"","sources":["../../../../../sdk-typescript/src/utils/EventSubscriptionManager.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- /** Handler receives (eventName, rawData). */
2
- export type EventHandler = (eventName: string, data: any) => void;
3
- /**
4
- * Manages a Socket.IO connection to the Daytona notification gateway
5
- * and dispatches resource events to per-resource handlers.
6
- */
7
- export declare class EventDispatcher {
8
- private readonly apiUrl;
9
- private readonly token;
10
- private readonly organizationId?;
11
- private readonly source?;
12
- private readonly sdkVersion?;
13
- private socket;
14
- private _connected;
15
- private _closed;
16
- private _failed;
17
- private _failError;
18
- private listeners;
19
- private registeredEvents;
20
- private connectPromise;
21
- private ensureConnectPromise;
22
- private reconnectAttempts;
23
- private readonly maxReconnectAttempts;
24
- private _connectTimer;
25
- private disconnectTimer;
26
- private disconnectGeneration;
27
- private static readonly DISCONNECT_DELAY_MS;
28
- private supportsBackgroundUnref;
29
- constructor(apiUrl: string, token: string, organizationId?: string, source?: string, sdkVersion?: string);
30
- /**
31
- * Idempotent: ensure a connection attempt is in progress or already established.
32
- *
33
- * Non-blocking. Fires-and-forgets a connect() call via a stored promise if not
34
- * already connected and no attempt is currently running.
35
- */
36
- ensureConnected(): void;
37
- /**
38
- * Establishes the Socket.IO connection. Resolves when connected.
39
- * Throws if the connection fails within the timeout.
40
- */
41
- connect(timeoutMs?: number): Promise<void>;
42
- private doConnect;
43
- /**
44
- * Registers Socket.IO event handlers (idempotent -- each event is registered once).
45
- */
46
- private registerEvents;
47
- /**
48
- * Registers a handler for events targeting a specific resource.
49
- * Returns an unsubscribe function.
50
- *
51
- * @param resourceId - The ID of the resource (e.g. sandbox ID).
52
- * @param handler - Callback receiving (eventName, rawData).
53
- * @param events - List of Socket.IO event names to listen for.
54
- */
55
- subscribe(resourceId: string, handler: EventHandler, events: string[]): () => void;
56
- /** Whether the WebSocket is currently connected */
57
- get isConnected(): boolean;
58
- /** Whether the WebSocket has permanently failed (exhausted reconnection attempts) */
59
- get isFailed(): boolean;
60
- /** The error message if the connection has failed */
61
- get failError(): string | null;
62
- /** Disconnects and cleans up all resources */
63
- disconnect(): void;
64
- private disconnectSocket;
65
- /**
66
- * Decides, by capability rather than runtime name, whether this runtime can keep a
67
- * background socket open without blocking process exit.
68
- *
69
- * A runtime qualifies only if it can unref BOTH the transport's raw socket AND timers:
70
- * Node/Deno (ws package exposes `_socket`, timers are objects) qualify; Bun (native
71
- * WebSocket has no `_socket`) and browsers (timers are numbers, no `_socket`) do not.
72
- *
73
- * When it qualifies, this unrefs the current connection's socket (engine.io skipped it —
74
- * autoUnref was off during the transport's onopen) and enables engine.io's own autoUnref
75
- * so it keeps every later ping-timeout and reconnect timer unref'd. When it does not,
76
- * autoUnref stays off (avoiding the `ws._socket.unref()` and number-timer crashes) and
77
- * the socket is dropped the instant it goes idle (see scheduleDelayedDisconnect).
78
- */
79
- private applyUnrefCapability;
80
- private dispatch;
81
- private cancelDelayedDisconnect;
82
- private clearConnectTimer;
83
- private scheduleDelayedDisconnect;
84
- }
85
- //# sourceMappingURL=EventDispatcher.d.ts.map