@openserv-labs/sdk 1.8.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +217 -5
- package/dist/agent.d.ts +3 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +43 -7
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +18 -4
- package/dist/run.d.ts +58 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +108 -0
- package/dist/tunnel.d.ts +189 -0
- package/dist/tunnel.d.ts.map +1 -0
- package/dist/tunnel.js +803 -0
- package/package.json +5 -1
package/dist/tunnel.d.ts
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* All possible states for the tunnel connection.
|
|
3
|
+
*/
|
|
4
|
+
export type TunnelState = 'idle' | 'starting' | 'connecting' | 'authenticating' | 'connected' | 'awaiting_reconnect_ack' | 'reconnect_delay' | 'stopping' | 'failed' | 'stopped';
|
|
5
|
+
/**
|
|
6
|
+
* Events that can trigger state transitions.
|
|
7
|
+
*/
|
|
8
|
+
export type TunnelEvent = 'START' | 'SETUP_COMPLETE' | 'SETUP_FAILED' | 'STOP' | 'CLEANUP_COMPLETE' | 'GRACEFUL_RECONNECT' | 'WS_OPEN' | 'WS_CLOSE' | 'WS_ERROR' | 'AUTH_SUCCESS' | 'AUTH_ERROR' | 'RECONNECT_ACK' | 'DELAY_COMPLETE' | 'ACK_TIMEOUT' | 'MAX_RETRIES';
|
|
9
|
+
export interface RequestData {
|
|
10
|
+
id: string;
|
|
11
|
+
method: string;
|
|
12
|
+
path: string;
|
|
13
|
+
headers: Record<string, string>;
|
|
14
|
+
body?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ResponseData {
|
|
17
|
+
status: number;
|
|
18
|
+
headers: Record<string, string | string[] | undefined>;
|
|
19
|
+
body: string;
|
|
20
|
+
}
|
|
21
|
+
export interface OpenServTunnelOptions {
|
|
22
|
+
/**
|
|
23
|
+
* The OpenServ API key for authentication.
|
|
24
|
+
* Required unless OPENSERV_API_KEY environment variable is set.
|
|
25
|
+
*/
|
|
26
|
+
apiKey?: string;
|
|
27
|
+
/**
|
|
28
|
+
* The proxy server URL.
|
|
29
|
+
* Defaults to OPENSERV_PROXY_URL env var or 'https://agents-proxy.openserv.ai'
|
|
30
|
+
*/
|
|
31
|
+
proxyUrl?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Called when tunnel is connected/reconnected.
|
|
34
|
+
*/
|
|
35
|
+
onConnected?: (isReconnect: boolean) => void | Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Called when a request is received through the tunnel.
|
|
38
|
+
*/
|
|
39
|
+
onRequest?: (method: string, path: string) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Called when an error occurs.
|
|
42
|
+
*/
|
|
43
|
+
onError?: (error: Error) => void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* OpenServ Tunnel
|
|
47
|
+
*
|
|
48
|
+
* Connects local agent servers to the OpenServ proxy service.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const tunnel = new OpenServTunnel({
|
|
53
|
+
* apiKey: process.env.OPENSERV_API_KEY
|
|
54
|
+
* })
|
|
55
|
+
*
|
|
56
|
+
* await tunnel.start(7378)
|
|
57
|
+
* console.log('Tunnel connected')
|
|
58
|
+
*
|
|
59
|
+
* // Later...
|
|
60
|
+
* await tunnel.stop()
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare class OpenServTunnel {
|
|
64
|
+
private proxyUrl;
|
|
65
|
+
private apiKey;
|
|
66
|
+
private localPort;
|
|
67
|
+
private ws;
|
|
68
|
+
private state;
|
|
69
|
+
private context;
|
|
70
|
+
private delayTimeoutId;
|
|
71
|
+
private ackTimeoutId;
|
|
72
|
+
private pendingStart;
|
|
73
|
+
private pendingGracefulReconnect;
|
|
74
|
+
private pendingStop;
|
|
75
|
+
private onConnected?;
|
|
76
|
+
private onRequest?;
|
|
77
|
+
private onError?;
|
|
78
|
+
constructor(options?: OpenServTunnelOptions);
|
|
79
|
+
/**
|
|
80
|
+
* Get the current state of the tunnel.
|
|
81
|
+
*/
|
|
82
|
+
getState(): TunnelState;
|
|
83
|
+
/**
|
|
84
|
+
* Attempt to transition to a new state based on an event.
|
|
85
|
+
* Returns true if the transition was valid and executed, false otherwise.
|
|
86
|
+
*/
|
|
87
|
+
private transition;
|
|
88
|
+
/**
|
|
89
|
+
* Actions to perform when exiting a state.
|
|
90
|
+
*/
|
|
91
|
+
private exitState;
|
|
92
|
+
/**
|
|
93
|
+
* Actions to perform when entering a state.
|
|
94
|
+
*/
|
|
95
|
+
private enterState;
|
|
96
|
+
/**
|
|
97
|
+
* Entry action for 'starting' state: validate and initialize.
|
|
98
|
+
* Resets context and validates API key before proceeding to connect.
|
|
99
|
+
*/
|
|
100
|
+
private doStarting;
|
|
101
|
+
/**
|
|
102
|
+
* Entry action for 'connecting' state: create WebSocket connection.
|
|
103
|
+
*/
|
|
104
|
+
private doConnect;
|
|
105
|
+
/**
|
|
106
|
+
* Entry action for 'authenticating' state: send auth message.
|
|
107
|
+
*/
|
|
108
|
+
private doAuthenticate;
|
|
109
|
+
/**
|
|
110
|
+
* Entry action for 'connected' state: resolve promises, call callbacks.
|
|
111
|
+
*/
|
|
112
|
+
private doConnected;
|
|
113
|
+
/**
|
|
114
|
+
* Entry action for 'awaiting_reconnect_ack' state: send will-reconnect and start timeout.
|
|
115
|
+
*/
|
|
116
|
+
private doAwaitReconnectAck;
|
|
117
|
+
/**
|
|
118
|
+
* Entry action for 'reconnect_delay' state: calculate backoff and start timer.
|
|
119
|
+
*/
|
|
120
|
+
private doReconnectDelay;
|
|
121
|
+
/**
|
|
122
|
+
* Entry action for 'stopping' state: clean up resources.
|
|
123
|
+
* Handles async WebSocket cleanup and transitions to 'stopped' when done.
|
|
124
|
+
*/
|
|
125
|
+
private doStopping;
|
|
126
|
+
/**
|
|
127
|
+
* Entry action for 'failed' state: reject promises, call error callback.
|
|
128
|
+
*/
|
|
129
|
+
private doFailed;
|
|
130
|
+
/**
|
|
131
|
+
* Entry action for 'stopped' state: resolve/reject pending promises.
|
|
132
|
+
* Cleanup has already been done in 'stopping' state.
|
|
133
|
+
*/
|
|
134
|
+
private doStopped;
|
|
135
|
+
/**
|
|
136
|
+
* Start the tunnel and connect to the proxy.
|
|
137
|
+
* @param port - The local port to expose
|
|
138
|
+
*/
|
|
139
|
+
start(port: number): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Stop the tunnel and clean up resources.
|
|
142
|
+
* Returns a promise that resolves when cleanup is complete.
|
|
143
|
+
*/
|
|
144
|
+
stop(): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Check if the tunnel is currently connected and authenticated.
|
|
147
|
+
* Returns true only after the tunnel has successfully registered with the proxy.
|
|
148
|
+
*/
|
|
149
|
+
isConnected(): boolean;
|
|
150
|
+
private setupWebSocket;
|
|
151
|
+
/**
|
|
152
|
+
* Handle WebSocket 'open' event - dispatch WS_OPEN event.
|
|
153
|
+
*/
|
|
154
|
+
private handleWsOpen;
|
|
155
|
+
/**
|
|
156
|
+
* Handle WebSocket 'message' event - dispatch appropriate events based on message type.
|
|
157
|
+
*/
|
|
158
|
+
private handleWsMessage;
|
|
159
|
+
/**
|
|
160
|
+
* Handle protocol-level error message from server.
|
|
161
|
+
*/
|
|
162
|
+
private handleProtocolError;
|
|
163
|
+
/**
|
|
164
|
+
* Handle will-reconnect-ack message from server.
|
|
165
|
+
*/
|
|
166
|
+
private handleReconnectAck;
|
|
167
|
+
/**
|
|
168
|
+
* Handle incoming request through the tunnel.
|
|
169
|
+
*/
|
|
170
|
+
private handleRequest;
|
|
171
|
+
/**
|
|
172
|
+
* Handle WebSocket 'close' event - dispatch WS_CLOSE event.
|
|
173
|
+
*/
|
|
174
|
+
private handleWsClose;
|
|
175
|
+
/**
|
|
176
|
+
* Handle WebSocket 'error' event - dispatch WS_ERROR event (informational).
|
|
177
|
+
*/
|
|
178
|
+
private handleWsError;
|
|
179
|
+
private logTunnelError;
|
|
180
|
+
private logConnectionErrorHint;
|
|
181
|
+
private forwardRequest;
|
|
182
|
+
/**
|
|
183
|
+
* Initiate a graceful reconnection to the proxy server.
|
|
184
|
+
* This notifies the server before disconnecting, allowing it to buffer requests.
|
|
185
|
+
* Returns a promise that resolves when the reconnection is complete.
|
|
186
|
+
*/
|
|
187
|
+
gracefulReconnect(): Promise<void>;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=tunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"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"}
|