@agentuity/frontend 0.0.100

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 (48) hide show
  1. package/AGENTS.md +80 -0
  2. package/README.md +65 -0
  3. package/dist/env.d.ts +2 -0
  4. package/dist/env.d.ts.map +1 -0
  5. package/dist/env.js +10 -0
  6. package/dist/env.js.map +1 -0
  7. package/dist/eventstream-manager.d.ts +85 -0
  8. package/dist/eventstream-manager.d.ts.map +1 -0
  9. package/dist/eventstream-manager.js +137 -0
  10. package/dist/eventstream-manager.js.map +1 -0
  11. package/dist/index.d.ts +9 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +8 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/memo.d.ts +6 -0
  16. package/dist/memo.d.ts.map +1 -0
  17. package/dist/memo.js +20 -0
  18. package/dist/memo.js.map +1 -0
  19. package/dist/reconnect.d.ts +22 -0
  20. package/dist/reconnect.d.ts.map +1 -0
  21. package/dist/reconnect.js +47 -0
  22. package/dist/reconnect.js.map +1 -0
  23. package/dist/serialization.d.ts +6 -0
  24. package/dist/serialization.d.ts.map +1 -0
  25. package/dist/serialization.js +16 -0
  26. package/dist/serialization.js.map +1 -0
  27. package/dist/types.d.ts +19 -0
  28. package/dist/types.d.ts.map +1 -0
  29. package/dist/types.js +2 -0
  30. package/dist/types.js.map +1 -0
  31. package/dist/url.d.ts +3 -0
  32. package/dist/url.d.ts.map +1 -0
  33. package/dist/url.js +24 -0
  34. package/dist/url.js.map +1 -0
  35. package/dist/websocket-manager.d.ts +90 -0
  36. package/dist/websocket-manager.d.ts.map +1 -0
  37. package/dist/websocket-manager.js +163 -0
  38. package/dist/websocket-manager.js.map +1 -0
  39. package/package.json +39 -0
  40. package/src/env.ts +9 -0
  41. package/src/eventstream-manager.ts +203 -0
  42. package/src/index.ts +20 -0
  43. package/src/memo.ts +16 -0
  44. package/src/reconnect.ts +73 -0
  45. package/src/serialization.ts +14 -0
  46. package/src/types.ts +29 -0
  47. package/src/url.ts +32 -0
  48. package/src/websocket-manager.ts +234 -0
package/AGENTS.md ADDED
@@ -0,0 +1,80 @@
1
+ # Agent Guidelines for @agentuity/web
2
+
3
+ ## Package Overview
4
+
5
+ Generic web utilities for building Agentuity frontend applications. Provides framework-agnostic utilities that can be used across React, Svelte, Vue, and other frontend frameworks.
6
+
7
+ ## Commands
8
+
9
+ - **Build**: `bun run build` (compiles for browser target)
10
+ - **Typecheck**: `bun run typecheck` (runs TypeScript type checking)
11
+ - **Clean**: `bun run clean` (removes dist/)
12
+
13
+ ## Architecture
14
+
15
+ - **Runtime**: Browser only (uses browser APIs like fetch, WebSocket, EventSource)
16
+ - **Build target**: Browser with ESNext
17
+ - **Dependencies**: Requires `@agentuity/core` (workspace dependency)
18
+ - **No framework dependencies**: Pure JavaScript/TypeScript with no React/Svelte/Vue dependencies
19
+
20
+ ## Structure
21
+
22
+ ```text
23
+ src/
24
+ ├── index.ts # Main entry point
25
+ ├── env.ts # Environment variable helpers
26
+ ├── url.ts # URL building utilities
27
+ ├── serialization.ts # JSON serialization helpers
28
+ ├── reconnect.ts # Exponential backoff reconnection logic
29
+ ├── types.ts # Type definitions for route registries
30
+ └── memo.ts # JSON equality utilities
31
+ ```
32
+
33
+ ## Code Style
34
+
35
+ - **Framework-agnostic** - No framework-specific dependencies (React, Svelte, etc.)
36
+ - **TypeScript generics** - Heavy use of generics for type safety
37
+ - **Pure functions** - All utilities are pure functions where possible
38
+ - **Browser APIs** - Uses standard browser APIs (fetch, WebSocket, EventSource)
39
+
40
+ ## Important Conventions
41
+
42
+ - **No framework dependencies** - This package must remain framework-agnostic
43
+ - **Type inference** - Route types are inferred from generated types (RouteRegistry)
44
+ - **Base URL** - Defaults to current origin if not provided
45
+ - **WebSocket protocol** - Auto-converts http:// to ws:// and https:// to wss://
46
+ - **Serialization** - Automatically handles JSON serialization/deserialization
47
+
48
+ ## Utilities
49
+
50
+ ### URL Building
51
+
52
+ - `buildUrl()` - Construct URLs with paths, subpaths, and query parameters
53
+ - `defaultBaseUrl` - Default base URL from environment or window.location.origin
54
+
55
+ ### Reconnection Manager
56
+
57
+ - `createReconnectManager()` - Exponential backoff reconnection logic with jitter
58
+ - Configurable threshold, delays, and retry strategies
59
+
60
+ ### Environment
61
+
62
+ - `getProcessEnv()` - Cross-platform environment variable access (process.env, import.meta.env)
63
+
64
+ ### Serialization
65
+
66
+ - `deserializeData()` - Safe JSON deserialization with fallback
67
+ - `jsonEqual()` - JSON-based equality check for memoization
68
+
69
+ ## Testing
70
+
71
+ - Test with Bun test runner
72
+ - Mock browser APIs where needed (fetch, WebSocket, EventSource)
73
+ - Ensure all utilities work without framework dependencies
74
+
75
+ ## Publishing Checklist
76
+
77
+ 1. Run `bun run build` to compile for browser
78
+ 2. Verify `dist/` contains browser-compatible code (no Node.js APIs)
79
+ 3. Ensure no framework-specific dependencies are added
80
+ 4. Must publish **after** @agentuity/core
package/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # @agentuity/web
2
+
3
+ Generic web utilities for building Agentuity frontend applications. Provides framework-agnostic utilities for URL building, serialization, reconnection logic, and type definitions.
4
+
5
+ This package contains reusable JavaScript logic that can be shared across different frontend frameworks (React, Svelte, Vue, etc.).
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @agentuity/web
11
+ ```
12
+
13
+ ## Features
14
+
15
+ - **URL Building**: Utilities for constructing URLs with query parameters
16
+ - **Environment Helpers**: Cross-platform environment variable access
17
+ - **Serialization**: JSON serialization/deserialization utilities
18
+ - **Reconnection Logic**: Exponential backoff reconnection manager for WebSockets and SSE
19
+ - **Type Definitions**: Shared TypeScript types for route registries
20
+ - **Memoization**: JSON-based equality checking
21
+
22
+ ## Usage
23
+
24
+ ### URL Building
25
+
26
+ ```typescript
27
+ import { buildUrl, defaultBaseUrl } from '@agentuity/web';
28
+
29
+ const url = buildUrl(
30
+ 'https://api.example.com',
31
+ '/users',
32
+ undefined,
33
+ new URLSearchParams({ page: '1' })
34
+ );
35
+ // => 'https://api.example.com/users?page=1'
36
+ ```
37
+
38
+ ### Reconnection Manager
39
+
40
+ ```typescript
41
+ import { createReconnectManager } from '@agentuity/web';
42
+
43
+ const reconnect = createReconnectManager({
44
+ onReconnect: () => console.log('Reconnecting...'),
45
+ threshold: 3,
46
+ baseDelay: 500,
47
+ factor: 2,
48
+ maxDelay: 30000,
49
+ });
50
+
51
+ // Record failures to trigger exponential backoff
52
+ reconnect.recordFailure();
53
+ ```
54
+
55
+ ### Serialization
56
+
57
+ ```typescript
58
+ import { deserializeData } from '@agentuity/web';
59
+
60
+ const data = deserializeData<MyType>('{"key":"value"}');
61
+ ```
62
+
63
+ ## License
64
+
65
+ Apache-2.0
package/dist/env.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const getProcessEnv: (key: string) => string | undefined;
2
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAQpD,CAAC"}
package/dist/env.js ADDED
@@ -0,0 +1,10 @@
1
+ export const getProcessEnv = (key) => {
2
+ if (typeof process !== 'undefined' && process.env) {
3
+ return process.env[key];
4
+ }
5
+ if (typeof import.meta.env !== 'undefined') {
6
+ return import.meta.env[key];
7
+ }
8
+ return undefined;
9
+ };
10
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAsB,EAAE;IAChE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC"}
@@ -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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"}
@@ -0,0 +1,9 @@
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 } 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
+ //# 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,EAAE,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACjG,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"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
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
+ //# 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;AAEnG,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EACN,gBAAgB,GAKhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,kBAAkB,GAKlB,MAAM,uBAAuB,CAAC"}
package/dist/memo.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Simple JSON-based equality check for memoization.
3
+ * Compares stringified JSON to avoid deep equality overhead.
4
+ */
5
+ export declare function jsonEqual<T>(a: T, b: T): boolean;
6
+ //# sourceMappingURL=memo.d.ts.map
@@ -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
@@ -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,6 @@
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 declare const deserializeData: <T>(data: string) => T;
6
+ //# sourceMappingURL=serialization.d.ts.map
@@ -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"}
@@ -0,0 +1,19 @@
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
+ export interface RouteRegistry {
6
+ }
7
+ /**
8
+ * WebSocket route registry containing all typed WebSocket routes in the application.
9
+ * Auto-generated by the build tool from routes that use validator() middleware.
10
+ */
11
+ export interface WebSocketRouteRegistry {
12
+ }
13
+ /**
14
+ * SSE route registry containing all typed SSE routes in the application.
15
+ * Auto-generated by the build tool from routes that use validator() middleware.
16
+ */
17
+ export interface SSERouteRegistry {
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;CAG7B;AAED;;;GAGG;AAEH,MAAM,WAAW,sBAAsB;CAGtC;AAED;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;CAGhC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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,3 @@
1
+ export declare const buildUrl: (base: string, path: string, subpath?: string, query?: URLSearchParams) => string;
2
+ export declare const defaultBaseUrl: string;
3
+ //# sourceMappingURL=url.d.ts.map
@@ -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
@@ -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"}