@agentuity/frontend 0.1.14 → 0.1.16
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/dist/analytics/beacon-standalone.d.ts +106 -0
- package/dist/analytics/beacon-standalone.d.ts.map +1 -0
- package/dist/analytics/beacon-standalone.js +584 -0
- package/dist/analytics/beacon-standalone.js.map +1 -0
- package/dist/analytics/index.d.ts +22 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +28 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/types.d.ts +141 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +2 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/analytics/utils/storage.d.ts +13 -0
- package/dist/analytics/utils/storage.d.ts.map +1 -0
- package/dist/analytics/utils/storage.js +63 -0
- package/dist/analytics/utils/storage.js.map +1 -0
- package/dist/analytics/utils/utm.d.ts +12 -0
- package/dist/analytics/utils/utm.d.ts.map +1 -0
- package/dist/analytics/utils/utm.js +27 -0
- package/dist/analytics/utils/utm.js.map +1 -0
- package/dist/beacon-script.d.ts +16 -0
- package/dist/beacon-script.d.ts.map +1 -0
- package/dist/beacon-script.js +1 -1
- package/dist/beacon-script.js.map +1 -0
- package/dist/beacon.js +1 -1
- package/dist/client/eventstream.d.ts +12 -0
- package/dist/client/eventstream.d.ts.map +1 -0
- package/dist/client/eventstream.js +39 -0
- package/dist/client/eventstream.js.map +1 -0
- package/dist/client/index.d.ts +33 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +227 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/stream.d.ts +6 -0
- package/dist/client/stream.d.ts.map +1 -0
- package/dist/client/stream.js +49 -0
- package/dist/client/stream.js.map +1 -0
- package/dist/client/types.d.ts +168 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +5 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/websocket.d.ts +6 -0
- package/dist/client/websocket.d.ts.map +1 -0
- package/dist/client/websocket.js +49 -0
- package/dist/client/websocket.js.map +1 -0
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +10 -0
- package/dist/env.js.map +1 -0
- package/dist/eventstream-manager.d.ts +85 -0
- package/dist/eventstream-manager.d.ts.map +1 -0
- package/dist/eventstream-manager.js +137 -0
- package/dist/eventstream-manager.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/memo.d.ts +6 -0
- package/dist/memo.d.ts.map +1 -0
- package/dist/memo.js +20 -0
- package/dist/memo.js.map +1 -0
- package/dist/reconnect.d.ts +22 -0
- package/dist/reconnect.d.ts.map +1 -0
- package/dist/reconnect.js +47 -0
- package/dist/reconnect.js.map +1 -0
- package/dist/serialization.d.ts +6 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/serialization.js +16 -0
- package/dist/serialization.js.map +1 -0
- package/dist/types.d.ts +42 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/url.d.ts +3 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +24 -0
- package/dist/url.js.map +1 -0
- package/dist/websocket-manager.d.ts +90 -0
- package/dist/websocket-manager.d.ts.map +1 -0
- package/dist/websocket-manager.js +163 -0
- package/dist/websocket-manager.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message handler callback type
|
|
3
|
+
*/
|
|
4
|
+
export type MessageHandler<T = unknown> = (data: T) => void;
|
|
5
|
+
/**
|
|
6
|
+
* EventStream state change callback types
|
|
7
|
+
*/
|
|
8
|
+
export interface EventStreamCallbacks<TOutput = unknown> {
|
|
9
|
+
/** Called when connection is established */
|
|
10
|
+
onConnect?: () => void;
|
|
11
|
+
/** Called when connection is closed */
|
|
12
|
+
onDisconnect?: () => void;
|
|
13
|
+
/** Called when an error occurs */
|
|
14
|
+
onError?: (error: Error) => void;
|
|
15
|
+
/** Called when a message is received */
|
|
16
|
+
onMessage?: MessageHandler<TOutput>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Options for EventStreamManager
|
|
20
|
+
*/
|
|
21
|
+
export interface EventStreamManagerOptions<TOutput = unknown> {
|
|
22
|
+
/** EventStream URL */
|
|
23
|
+
url: string;
|
|
24
|
+
/** Callbacks for state changes */
|
|
25
|
+
callbacks?: EventStreamCallbacks<TOutput>;
|
|
26
|
+
/** Reconnection configuration */
|
|
27
|
+
reconnect?: {
|
|
28
|
+
threshold?: number;
|
|
29
|
+
baseDelay?: number;
|
|
30
|
+
factor?: number;
|
|
31
|
+
maxDelay?: number;
|
|
32
|
+
jitter?: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* EventStream manager state
|
|
37
|
+
*/
|
|
38
|
+
export interface EventStreamManagerState {
|
|
39
|
+
/** Whether EventStream is currently connected */
|
|
40
|
+
isConnected: boolean;
|
|
41
|
+
/** Current error, if any */
|
|
42
|
+
error: Error | null;
|
|
43
|
+
/** EventStream ready state */
|
|
44
|
+
readyState: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Generic EventStream (SSE) connection manager with automatic reconnection
|
|
48
|
+
* and handler management.
|
|
49
|
+
*
|
|
50
|
+
* Framework-agnostic - can be used with React, Svelte, Vue, or vanilla JS.
|
|
51
|
+
*/
|
|
52
|
+
export declare class EventStreamManager<TOutput = unknown> {
|
|
53
|
+
private es;
|
|
54
|
+
private manualClose;
|
|
55
|
+
private pendingMessages;
|
|
56
|
+
private messageHandler;
|
|
57
|
+
private reconnectManager;
|
|
58
|
+
private callbacks;
|
|
59
|
+
private url;
|
|
60
|
+
private reconnectConfig;
|
|
61
|
+
private firstMessageReceived;
|
|
62
|
+
constructor(options: EventStreamManagerOptions<TOutput>);
|
|
63
|
+
/**
|
|
64
|
+
* Connect to the EventStream server
|
|
65
|
+
*/
|
|
66
|
+
connect(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Set the message handler.
|
|
69
|
+
* Any buffered messages will be delivered immediately.
|
|
70
|
+
*/
|
|
71
|
+
setMessageHandler(handler: MessageHandler<TOutput>): void;
|
|
72
|
+
/**
|
|
73
|
+
* Get current state
|
|
74
|
+
*/
|
|
75
|
+
getState(): EventStreamManagerState;
|
|
76
|
+
/**
|
|
77
|
+
* Close the EventStream connection and cleanup
|
|
78
|
+
*/
|
|
79
|
+
close(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Dispose of the manager (alias for close)
|
|
82
|
+
*/
|
|
83
|
+
dispose(): void;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=eventstream-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventstream-manager.d.ts","sourceRoot":"","sources":["../src/eventstream-manager.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,OAAO,GAAG,OAAO;IACtD,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,wCAAwC;IACxC,SAAS,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,OAAO,GAAG,OAAO;IAC3D,sBAAsB;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,SAAS,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1C,iCAAiC;IACjC,SAAS,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,iDAAiD;IACjD,WAAW,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB,CAAC,OAAO,GAAG,OAAO;IAChD,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,eAAe,CAAyE;IAChG,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,OAAO,EAAE,yBAAyB,CAAC,OAAO,CAAC;IAYvD;;OAEG;IACH,OAAO,IAAI,IAAI;IAoEf;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI;IAOzD;;OAEG;IACH,QAAQ,IAAI,uBAAuB;IAQnC;;OAEG;IACH,KAAK,IAAI,IAAI;IAmBb;;OAEG;IACH,OAAO,IAAI,IAAI;CAGf"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { createReconnectManager } from './reconnect';
|
|
2
|
+
import { deserializeData } from './serialization';
|
|
3
|
+
/**
|
|
4
|
+
* Generic EventStream (SSE) connection manager with automatic reconnection
|
|
5
|
+
* and handler management.
|
|
6
|
+
*
|
|
7
|
+
* Framework-agnostic - can be used with React, Svelte, Vue, or vanilla JS.
|
|
8
|
+
*/
|
|
9
|
+
export class EventStreamManager {
|
|
10
|
+
es;
|
|
11
|
+
manualClose = false;
|
|
12
|
+
pendingMessages = [];
|
|
13
|
+
messageHandler;
|
|
14
|
+
reconnectManager;
|
|
15
|
+
callbacks;
|
|
16
|
+
url;
|
|
17
|
+
reconnectConfig;
|
|
18
|
+
firstMessageReceived = false;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.url = options.url;
|
|
21
|
+
this.callbacks = options.callbacks || {};
|
|
22
|
+
this.reconnectConfig = {
|
|
23
|
+
threshold: options.reconnect?.threshold ?? 3,
|
|
24
|
+
baseDelay: options.reconnect?.baseDelay ?? 500,
|
|
25
|
+
factor: options.reconnect?.factor ?? 2,
|
|
26
|
+
maxDelay: options.reconnect?.maxDelay ?? 30000,
|
|
27
|
+
jitter: options.reconnect?.jitter ?? 250,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Connect to the EventStream server
|
|
32
|
+
*/
|
|
33
|
+
connect() {
|
|
34
|
+
if (this.manualClose)
|
|
35
|
+
return;
|
|
36
|
+
this.es = new EventSource(this.url);
|
|
37
|
+
this.firstMessageReceived = false;
|
|
38
|
+
this.es.onopen = () => {
|
|
39
|
+
this.reconnectManager?.recordSuccess();
|
|
40
|
+
this.callbacks.onConnect?.();
|
|
41
|
+
};
|
|
42
|
+
this.es.onerror = () => {
|
|
43
|
+
const error = new Error('EventStream error');
|
|
44
|
+
this.callbacks.onError?.(error);
|
|
45
|
+
this.callbacks.onDisconnect?.();
|
|
46
|
+
if (this.manualClose) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const result = this.reconnectManager?.recordFailure();
|
|
50
|
+
if (result?.scheduled) {
|
|
51
|
+
// Close current connection before reconnecting
|
|
52
|
+
if (this.es) {
|
|
53
|
+
this.es.onopen = null;
|
|
54
|
+
this.es.onerror = null;
|
|
55
|
+
this.es.onmessage = null;
|
|
56
|
+
this.es.close();
|
|
57
|
+
}
|
|
58
|
+
this.es = undefined;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
this.es.onmessage = (event) => {
|
|
62
|
+
// Record success on first message (not just on open)
|
|
63
|
+
if (!this.firstMessageReceived) {
|
|
64
|
+
this.reconnectManager?.recordSuccess();
|
|
65
|
+
this.firstMessageReceived = true;
|
|
66
|
+
}
|
|
67
|
+
const payload = deserializeData(event.data);
|
|
68
|
+
// Call the registered message handler
|
|
69
|
+
if (this.messageHandler) {
|
|
70
|
+
this.messageHandler(payload);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// Buffer messages until a handler is set
|
|
74
|
+
this.pendingMessages.push(payload);
|
|
75
|
+
}
|
|
76
|
+
// Also call the callback if provided
|
|
77
|
+
this.callbacks.onMessage?.(payload);
|
|
78
|
+
};
|
|
79
|
+
// Setup reconnect manager
|
|
80
|
+
if (!this.reconnectManager) {
|
|
81
|
+
this.reconnectManager = createReconnectManager({
|
|
82
|
+
onReconnect: () => this.connect(),
|
|
83
|
+
threshold: this.reconnectConfig.threshold,
|
|
84
|
+
baseDelay: this.reconnectConfig.baseDelay,
|
|
85
|
+
factor: this.reconnectConfig.factor,
|
|
86
|
+
maxDelay: this.reconnectConfig.maxDelay,
|
|
87
|
+
jitter: this.reconnectConfig.jitter,
|
|
88
|
+
enabled: () => !this.manualClose,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Set the message handler.
|
|
94
|
+
* Any buffered messages will be delivered immediately.
|
|
95
|
+
*/
|
|
96
|
+
setMessageHandler(handler) {
|
|
97
|
+
this.messageHandler = handler;
|
|
98
|
+
// Flush pending messages
|
|
99
|
+
this.pendingMessages.forEach(handler);
|
|
100
|
+
this.pendingMessages = [];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get current state
|
|
104
|
+
*/
|
|
105
|
+
getState() {
|
|
106
|
+
return {
|
|
107
|
+
isConnected: this.es?.readyState === EventSource.OPEN,
|
|
108
|
+
error: null, // Error state managed externally via callbacks
|
|
109
|
+
readyState: this.es?.readyState ?? EventSource.CLOSED,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Close the EventStream connection and cleanup
|
|
114
|
+
*/
|
|
115
|
+
close() {
|
|
116
|
+
this.manualClose = true;
|
|
117
|
+
this.reconnectManager?.dispose();
|
|
118
|
+
if (this.es) {
|
|
119
|
+
this.es.onopen = null;
|
|
120
|
+
this.es.onerror = null;
|
|
121
|
+
this.es.onmessage = null;
|
|
122
|
+
this.es.close();
|
|
123
|
+
}
|
|
124
|
+
this.es = undefined;
|
|
125
|
+
this.messageHandler = undefined;
|
|
126
|
+
this.pendingMessages = [];
|
|
127
|
+
// Notify disconnect callback
|
|
128
|
+
this.callbacks.onDisconnect?.();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Dispose of the manager (alias for close)
|
|
132
|
+
*/
|
|
133
|
+
dispose() {
|
|
134
|
+
this.close();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=eventstream-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventstream-manager.js","sourceRoot":"","sources":["../src/eventstream-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { getProcessEnv } from './env';
|
|
2
|
+
export { buildUrl, defaultBaseUrl } from './url';
|
|
3
|
+
export { deserializeData } from './serialization';
|
|
4
|
+
export { createReconnectManager, type ReconnectOptions, type ReconnectManager } from './reconnect';
|
|
5
|
+
export { type RouteRegistry, type WebSocketRouteRegistry, type SSERouteRegistry, type RPCRouteRegistry, } from './types';
|
|
6
|
+
export { jsonEqual } from './memo';
|
|
7
|
+
export { WebSocketManager, type MessageHandler as WebSocketMessageHandler, type WebSocketCallbacks, type WebSocketManagerOptions, type WebSocketManagerState, } from './websocket-manager';
|
|
8
|
+
export { EventStreamManager, type MessageHandler as EventStreamMessageHandler, type EventStreamCallbacks, type EventStreamManagerOptions, type EventStreamManagerState, } from './eventstream-manager';
|
|
9
|
+
export { createClient } from './client/index';
|
|
10
|
+
export type { Client, ClientOptions, RouteEndpoint, WebSocketClient, EventStreamClient, StreamClient, EventHandler, } from './client/types';
|
|
11
|
+
export { getAnalytics, track, getVisitorId, isOptedOut, setOptOut, getUTMParams, type AnalyticsClient, type AnalyticsPayload, type AnalyticsPageConfig, type PageViewPayload, type ScrollEvent, type AnalyticsCustomEvent, type GeoLocation, } from './analytics';
|
|
12
|
+
export { BEACON_SCRIPT, validateBeaconScript } from './beacon-script';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EACN,gBAAgB,EAChB,KAAK,cAAc,IAAI,uBAAuB,EAC9C,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,kBAAkB,EAClB,KAAK,cAAc,IAAI,yBAAyB,EAChD,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,GAC5B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EACX,MAAM,EACN,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACN,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,WAAW,GAChB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { getProcessEnv } from './env';
|
|
2
|
+
export { buildUrl, defaultBaseUrl } from './url';
|
|
3
|
+
export { deserializeData } from './serialization';
|
|
4
|
+
export { createReconnectManager } from './reconnect';
|
|
5
|
+
export { jsonEqual } from './memo';
|
|
6
|
+
export { WebSocketManager, } from './websocket-manager';
|
|
7
|
+
export { EventStreamManager, } from './eventstream-manager';
|
|
8
|
+
// Export client implementation (local to this package)
|
|
9
|
+
export { createClient } from './client/index';
|
|
10
|
+
// Export analytics (beacon is bundled separately via beacon-standalone.ts)
|
|
11
|
+
export { getAnalytics, track, getVisitorId, isOptedOut, setOptOut, getUTMParams, } from './analytics';
|
|
12
|
+
// Re-export beacon script for server-side use
|
|
13
|
+
// The actual value is replaced at build time by scripts/build-beacon.ts
|
|
14
|
+
export { BEACON_SCRIPT, validateBeaconScript } from './beacon-script';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAgD,MAAM,aAAa,CAAC;AAOnG,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EACN,gBAAgB,GAKhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,kBAAkB,GAKlB,MAAM,uBAAuB,CAAC;AAE/B,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAW9C,2EAA2E;AAC3E,OAAO,EACN,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,YAAY,GAQZ,MAAM,aAAa,CAAC;AAErB,8CAA8C;AAC9C,wEAAwE;AACxE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/memo.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../src/memo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,CAWhD"}
|
package/dist/memo.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple JSON-based equality check for memoization.
|
|
3
|
+
* Compares stringified JSON to avoid deep equality overhead.
|
|
4
|
+
*/
|
|
5
|
+
export function jsonEqual(a, b) {
|
|
6
|
+
if (a === b)
|
|
7
|
+
return true;
|
|
8
|
+
if (a === undefined || b === undefined)
|
|
9
|
+
return false;
|
|
10
|
+
if (a === null || b === null)
|
|
11
|
+
return a === b;
|
|
12
|
+
try {
|
|
13
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Fallback for non-serializable values
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=memo.js.map
|
package/dist/memo.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.js","sourceRoot":"","sources":["../src/memo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAI,CAAI,EAAE,CAAI;IACtC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACR,uCAAuC;QACvC,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface ReconnectOptions {
|
|
2
|
+
onReconnect: () => void;
|
|
3
|
+
threshold?: number;
|
|
4
|
+
baseDelay?: number;
|
|
5
|
+
factor?: number;
|
|
6
|
+
maxDelay?: number;
|
|
7
|
+
jitter?: number;
|
|
8
|
+
enabled?: () => boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface ReconnectManager {
|
|
11
|
+
recordFailure: () => {
|
|
12
|
+
scheduled: boolean;
|
|
13
|
+
delay: number | null;
|
|
14
|
+
};
|
|
15
|
+
recordSuccess: () => void;
|
|
16
|
+
cancel: () => void;
|
|
17
|
+
reset: () => void;
|
|
18
|
+
dispose: () => void;
|
|
19
|
+
getAttempts: () => number;
|
|
20
|
+
}
|
|
21
|
+
export declare function createReconnectManager(opts: ReconnectOptions): ReconnectManager;
|
|
22
|
+
//# sourceMappingURL=reconnect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconnect.d.ts","sourceRoot":"","sources":["../src/reconnect.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAChC,aAAa,EAAE,MAAM;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAClE,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,CAqD/E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export function createReconnectManager(opts) {
|
|
2
|
+
let attempts = 0;
|
|
3
|
+
let timer = null;
|
|
4
|
+
const cancel = () => {
|
|
5
|
+
if (timer) {
|
|
6
|
+
clearTimeout(timer);
|
|
7
|
+
timer = null;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
const reset = () => {
|
|
11
|
+
attempts = 0;
|
|
12
|
+
cancel();
|
|
13
|
+
};
|
|
14
|
+
const recordSuccess = () => reset();
|
|
15
|
+
const computeDelay = (attemptAfterThreshold) => {
|
|
16
|
+
const base = opts.baseDelay ?? 500;
|
|
17
|
+
const factor = opts.factor ?? 2;
|
|
18
|
+
const max = opts.maxDelay ?? 30000;
|
|
19
|
+
const jitterMax = opts.jitter ?? 250;
|
|
20
|
+
const backoff = Math.min(base * Math.pow(factor, attemptAfterThreshold), max);
|
|
21
|
+
const jitter = jitterMax > 0 ? Math.random() * jitterMax : 0;
|
|
22
|
+
return backoff + jitter;
|
|
23
|
+
};
|
|
24
|
+
const recordFailure = () => {
|
|
25
|
+
attempts += 1;
|
|
26
|
+
const threshold = opts.threshold ?? 0;
|
|
27
|
+
if (opts.enabled && !opts.enabled()) {
|
|
28
|
+
return { scheduled: false, delay: null };
|
|
29
|
+
}
|
|
30
|
+
if (attempts - threshold >= 0) {
|
|
31
|
+
const after = Math.max(0, attempts - threshold);
|
|
32
|
+
const delay = computeDelay(after);
|
|
33
|
+
cancel();
|
|
34
|
+
timer = setTimeout(() => {
|
|
35
|
+
if (opts.enabled && !opts.enabled())
|
|
36
|
+
return;
|
|
37
|
+
opts.onReconnect();
|
|
38
|
+
}, delay);
|
|
39
|
+
return { scheduled: true, delay };
|
|
40
|
+
}
|
|
41
|
+
return { scheduled: false, delay: null };
|
|
42
|
+
};
|
|
43
|
+
const dispose = () => cancel();
|
|
44
|
+
const getAttempts = () => attempts;
|
|
45
|
+
return { recordFailure, recordSuccess, cancel, reset, dispose, getAttempts };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=reconnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconnect.js","sourceRoot":"","sources":["../src/reconnect.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC5D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,KAAK,GAAyC,IAAI,CAAC;IAEvD,MAAM,MAAM,GAAG,GAAG,EAAE;QACnB,IAAI,KAAK,EAAE,CAAC;YACX,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC;QACd,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QAClB,QAAQ,GAAG,CAAC,CAAC;QACb,MAAM,EAAE,CAAC;IACV,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,MAAM,YAAY,GAAG,CAAC,qBAA6B,EAAE,EAAE;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,OAAO,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,QAAQ,IAAI,CAAC,CAAC;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACrC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;QAED,IAAI,QAAQ,GAAG,SAAS,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,EAAE,CAAC;YACT,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACvB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO;gBAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAE/B,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;IAEnC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,MAAM,MAAM,KAAG,CASjD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deserialize data received from WebSocket or EventStream.
|
|
3
|
+
* Attempts to parse as JSON if the data looks like JSON, otherwise returns as-is.
|
|
4
|
+
*/
|
|
5
|
+
export const deserializeData = (data) => {
|
|
6
|
+
if (data) {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.parse(data);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
/* */
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return data;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,IAAY,EAAK,EAAE;IACrD,IAAI,IAAI,EAAE,CAAC;QACV,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACR,KAAK;QACN,CAAC;IACF,CAAC;IACD,OAAO,IAAS,CAAC;AAClB,CAAC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route registry containing all typed API routes in the application.
|
|
3
|
+
* Auto-generated by the build tool from routes that use validator() middleware.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* This interface is augmented by generated code via `declare module '@agentuity/frontend'`.
|
|
7
|
+
* The augmentation provides type-safe routing for useAPI and other hooks.
|
|
8
|
+
*/
|
|
9
|
+
export interface RouteRegistry {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* WebSocket route registry containing all typed WebSocket routes in the application.
|
|
13
|
+
* Auto-generated by the build tool from routes that use validator() middleware.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* This interface is augmented by generated code via `declare module '@agentuity/frontend'`.
|
|
17
|
+
* The augmentation provides type-safe routing for useWebsocket and other hooks.
|
|
18
|
+
*/
|
|
19
|
+
export interface WebSocketRouteRegistry {
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* SSE route registry containing all typed SSE routes in the application.
|
|
23
|
+
* Auto-generated by the build tool from routes that use validator() middleware.
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* This interface is augmented by generated code via `declare module '@agentuity/frontend'`.
|
|
27
|
+
* The augmentation provides type-safe routing for useEventStream and other hooks.
|
|
28
|
+
*/
|
|
29
|
+
export interface SSERouteRegistry {
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* RPC route registry containing all typed RPC routes in the application.
|
|
33
|
+
* Used by createClient() and createAPIClient() for type-safe RPC-style API calls.
|
|
34
|
+
* Auto-generated by the build tool from route discovery.
|
|
35
|
+
*
|
|
36
|
+
* @remarks
|
|
37
|
+
* This interface is augmented by generated code via `declare module '@agentuity/frontend'`.
|
|
38
|
+
* The augmentation provides type-safe routing for createClient and createAPIClient.
|
|
39
|
+
*/
|
|
40
|
+
export interface RPCRouteRegistry {
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,aAAa;CAG7B;AAED;;;;;;;GAOG;AAEH,MAAM,WAAW,sBAAsB;CAGtC;AAED;;;;;;;GAOG;AAEH,MAAM,WAAW,gBAAgB;CAGhC;AAED;;;;;;;;GAQG;AAEH,MAAM,WAAW,gBAAgB;CAGhC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/url.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,GACpB,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,UAAU,MAAM,EAChB,QAAQ,eAAe,KACrB,MAWF,CAAC;AAQF,eAAO,MAAM,cAAc,EAAE,MAKL,CAAC"}
|
package/dist/url.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getProcessEnv } from './env';
|
|
2
|
+
export const buildUrl = (base, path, subpath, query) => {
|
|
3
|
+
path = path.startsWith('/') ? path : `/${path}`;
|
|
4
|
+
let url = base.replace(/\/$/, '') + path;
|
|
5
|
+
if (subpath) {
|
|
6
|
+
subpath = subpath.startsWith('/') ? subpath : `/${subpath}`;
|
|
7
|
+
url += `/${subpath}`;
|
|
8
|
+
}
|
|
9
|
+
if (query) {
|
|
10
|
+
url += `?${query.toString()}`;
|
|
11
|
+
}
|
|
12
|
+
return url;
|
|
13
|
+
};
|
|
14
|
+
const tryOrigin = () => {
|
|
15
|
+
if (typeof window !== 'undefined') {
|
|
16
|
+
return window.location.origin;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export const defaultBaseUrl = getProcessEnv('NEXT_PUBLIC_AGENTUITY_URL') ||
|
|
20
|
+
getProcessEnv('VITE_AGENTUITY_URL') ||
|
|
21
|
+
getProcessEnv('AGENTUITY_URL') ||
|
|
22
|
+
tryOrigin() ||
|
|
23
|
+
'http://localhost:3500';
|
|
24
|
+
//# sourceMappingURL=url.js.map
|
package/dist/url.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,IAAY,EACZ,IAAY,EACZ,OAAgB,EAChB,KAAuB,EACd,EAAE;IACX,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAChD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IACzC,IAAI,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAC5D,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACX,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,GAAG,EAAE;IACtB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/B,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAC1B,aAAa,CAAC,2BAA2B,CAAC;IAC1C,aAAa,CAAC,oBAAoB,CAAC;IACnC,aAAa,CAAC,eAAe,CAAC;IAC9B,SAAS,EAAE;IACX,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message handler callback type
|
|
3
|
+
*/
|
|
4
|
+
export type MessageHandler<T = unknown> = (data: T) => void;
|
|
5
|
+
/**
|
|
6
|
+
* WebSocket state change callback types
|
|
7
|
+
*/
|
|
8
|
+
export interface WebSocketCallbacks<TOutput = unknown> {
|
|
9
|
+
/** Called when connection is established */
|
|
10
|
+
onConnect?: () => void;
|
|
11
|
+
/** Called when connection is closed */
|
|
12
|
+
onDisconnect?: () => void;
|
|
13
|
+
/** Called when an error occurs */
|
|
14
|
+
onError?: (error: Error) => void;
|
|
15
|
+
/** Called when a message is received */
|
|
16
|
+
onMessage?: MessageHandler<TOutput>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Options for WebSocketManager
|
|
20
|
+
*/
|
|
21
|
+
export interface WebSocketManagerOptions<TOutput = unknown> {
|
|
22
|
+
/** WebSocket URL */
|
|
23
|
+
url: string;
|
|
24
|
+
/** Callbacks for state changes */
|
|
25
|
+
callbacks?: WebSocketCallbacks<TOutput>;
|
|
26
|
+
/** Reconnection configuration */
|
|
27
|
+
reconnect?: {
|
|
28
|
+
threshold?: number;
|
|
29
|
+
baseDelay?: number;
|
|
30
|
+
factor?: number;
|
|
31
|
+
maxDelay?: number;
|
|
32
|
+
jitter?: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* WebSocket manager state
|
|
37
|
+
*/
|
|
38
|
+
export interface WebSocketManagerState {
|
|
39
|
+
/** Whether WebSocket is currently connected */
|
|
40
|
+
isConnected: boolean;
|
|
41
|
+
/** Current error, if any */
|
|
42
|
+
error: Error | null;
|
|
43
|
+
/** WebSocket ready state */
|
|
44
|
+
readyState: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Generic WebSocket connection manager with automatic reconnection,
|
|
48
|
+
* message queuing, and handler management.
|
|
49
|
+
*
|
|
50
|
+
* Framework-agnostic - can be used with React, Svelte, Vue, or vanilla JS.
|
|
51
|
+
*/
|
|
52
|
+
export declare class WebSocketManager<TInput = unknown, TOutput = unknown> {
|
|
53
|
+
private ws;
|
|
54
|
+
private manualClose;
|
|
55
|
+
private pendingMessages;
|
|
56
|
+
private queuedMessages;
|
|
57
|
+
private messageHandler;
|
|
58
|
+
private reconnectManager;
|
|
59
|
+
private callbacks;
|
|
60
|
+
private url;
|
|
61
|
+
private reconnectConfig;
|
|
62
|
+
constructor(options: WebSocketManagerOptions<TOutput>);
|
|
63
|
+
/**
|
|
64
|
+
* Connect to the WebSocket server
|
|
65
|
+
*/
|
|
66
|
+
connect(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Send data through the WebSocket.
|
|
69
|
+
* Messages are queued if not currently connected.
|
|
70
|
+
*/
|
|
71
|
+
send(data: TInput): void;
|
|
72
|
+
/**
|
|
73
|
+
* Set the message handler.
|
|
74
|
+
* Any buffered messages will be delivered immediately.
|
|
75
|
+
*/
|
|
76
|
+
setMessageHandler(handler: MessageHandler<TOutput>): void;
|
|
77
|
+
/**
|
|
78
|
+
* Get current state
|
|
79
|
+
*/
|
|
80
|
+
getState(): WebSocketManagerState;
|
|
81
|
+
/**
|
|
82
|
+
* Close the WebSocket connection and cleanup
|
|
83
|
+
*/
|
|
84
|
+
close(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Dispose of the manager (alias for close)
|
|
87
|
+
*/
|
|
88
|
+
dispose(): void;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=websocket-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-manager.d.ts","sourceRoot":"","sources":["../src/websocket-manager.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,OAAO,GAAG,OAAO;IACpD,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,wCAAwC;IACxC,SAAS,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,OAAO,GAAG,OAAO;IACzD,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,SAAS,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,iCAAiC;IACjC,SAAS,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAChE,OAAO,CAAC,EAAE,CAAwB;IAClC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,eAAe,CAAuE;gBAElF,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC;IAYrD;;OAEG;IACH,OAAO,IAAI,IAAI;IAmEf;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI;IAOzD;;OAEG;IACH,QAAQ,IAAI,qBAAqB;IAQjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAqBb;;OAEG;IACH,OAAO,IAAI,IAAI;CAGf"}
|