rocketride 1.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 +476 -0
- package/dist/cjs/client.js +1745 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/constants.js +48 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/core/DAPBase.js +328 -0
- package/dist/cjs/core/DAPBase.js.map +1 -0
- package/dist/cjs/core/DAPClient.js +226 -0
- package/dist/cjs/core/DAPClient.js.map +1 -0
- package/dist/cjs/core/TransportBase.js +152 -0
- package/dist/cjs/core/TransportBase.js.map +1 -0
- package/dist/cjs/core/TransportWebSocket.js +646 -0
- package/dist/cjs/core/TransportWebSocket.js.map +1 -0
- package/dist/cjs/exceptions/index.js +119 -0
- package/dist/cjs/exceptions/index.js.map +1 -0
- package/dist/cjs/index.js +56 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/schema/Doc.js +79 -0
- package/dist/cjs/schema/Doc.js.map +1 -0
- package/dist/cjs/schema/DocFilter.js +133 -0
- package/dist/cjs/schema/DocFilter.js.map +1 -0
- package/dist/cjs/schema/DocGroup.js +230 -0
- package/dist/cjs/schema/DocGroup.js.map +1 -0
- package/dist/cjs/schema/DocMetadata.js +58 -0
- package/dist/cjs/schema/DocMetadata.js.map +1 -0
- package/dist/cjs/schema/Question.js +414 -0
- package/dist/cjs/schema/Question.js.map +1 -0
- package/dist/cjs/schema/index.js +50 -0
- package/dist/cjs/schema/index.js.map +1 -0
- package/dist/cjs/types/client.js +26 -0
- package/dist/cjs/types/client.js.map +1 -0
- package/dist/cjs/types/data.js +26 -0
- package/dist/cjs/types/data.js.map +1 -0
- package/dist/cjs/types/events.js +119 -0
- package/dist/cjs/types/events.js.map +1 -0
- package/dist/cjs/types/index.js +50 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/pipeline.js +26 -0
- package/dist/cjs/types/pipeline.js.map +1 -0
- package/dist/cjs/types/task.js +115 -0
- package/dist/cjs/types/task.js.map +1 -0
- package/dist/cli/cli/rocketride.js +1399 -0
- package/dist/cli/cli/rocketride.js.map +1 -0
- package/dist/cli/client/client.js +1745 -0
- package/dist/cli/client/client.js.map +1 -0
- package/dist/cli/client/constants.js +48 -0
- package/dist/cli/client/constants.js.map +1 -0
- package/dist/cli/client/core/DAPBase.js +328 -0
- package/dist/cli/client/core/DAPBase.js.map +1 -0
- package/dist/cli/client/core/DAPClient.js +226 -0
- package/dist/cli/client/core/DAPClient.js.map +1 -0
- package/dist/cli/client/core/TransportBase.js +152 -0
- package/dist/cli/client/core/TransportBase.js.map +1 -0
- package/dist/cli/client/core/TransportWebSocket.js +646 -0
- package/dist/cli/client/core/TransportWebSocket.js.map +1 -0
- package/dist/cli/client/exceptions/index.js +119 -0
- package/dist/cli/client/exceptions/index.js.map +1 -0
- package/dist/cli/client/index.js +56 -0
- package/dist/cli/client/index.js.map +1 -0
- package/dist/cli/client/schema/Doc.js +79 -0
- package/dist/cli/client/schema/Doc.js.map +1 -0
- package/dist/cli/client/schema/DocFilter.js +133 -0
- package/dist/cli/client/schema/DocFilter.js.map +1 -0
- package/dist/cli/client/schema/DocGroup.js +230 -0
- package/dist/cli/client/schema/DocGroup.js.map +1 -0
- package/dist/cli/client/schema/DocMetadata.js +58 -0
- package/dist/cli/client/schema/DocMetadata.js.map +1 -0
- package/dist/cli/client/schema/Question.js +414 -0
- package/dist/cli/client/schema/Question.js.map +1 -0
- package/dist/cli/client/schema/index.js +50 -0
- package/dist/cli/client/schema/index.js.map +1 -0
- package/dist/cli/client/types/client.js +26 -0
- package/dist/cli/client/types/client.js.map +1 -0
- package/dist/cli/client/types/data.js +26 -0
- package/dist/cli/client/types/data.js.map +1 -0
- package/dist/cli/client/types/events.js +119 -0
- package/dist/cli/client/types/events.js.map +1 -0
- package/dist/cli/client/types/index.js +50 -0
- package/dist/cli/client/types/index.js.map +1 -0
- package/dist/cli/client/types/pipeline.js +26 -0
- package/dist/cli/client/types/pipeline.js.map +1 -0
- package/dist/cli/client/types/task.js +115 -0
- package/dist/cli/client/types/task.js.map +1 -0
- package/dist/esm/client.js +1740 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/constants.js +45 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/core/DAPBase.js +324 -0
- package/dist/esm/core/DAPBase.js.map +1 -0
- package/dist/esm/core/DAPClient.js +222 -0
- package/dist/esm/core/DAPClient.js.map +1 -0
- package/dist/esm/core/TransportBase.js +148 -0
- package/dist/esm/core/TransportBase.js.map +1 -0
- package/dist/esm/core/TransportWebSocket.js +609 -0
- package/dist/esm/core/TransportWebSocket.js.map +1 -0
- package/dist/esm/exceptions/index.js +109 -0
- package/dist/esm/exceptions/index.js.map +1 -0
- package/dist/esm/index.js +40 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/schema/Doc.js +75 -0
- package/dist/esm/schema/Doc.js.map +1 -0
- package/dist/esm/schema/DocFilter.js +129 -0
- package/dist/esm/schema/DocFilter.js.map +1 -0
- package/dist/esm/schema/DocGroup.js +226 -0
- package/dist/esm/schema/DocGroup.js.map +1 -0
- package/dist/esm/schema/DocMetadata.js +54 -0
- package/dist/esm/schema/DocMetadata.js.map +1 -0
- package/dist/esm/schema/Question.js +409 -0
- package/dist/esm/schema/Question.js.map +1 -0
- package/dist/esm/schema/index.js +34 -0
- package/dist/esm/schema/index.js.map +1 -0
- package/dist/esm/types/client.js +25 -0
- package/dist/esm/types/client.js.map +1 -0
- package/dist/esm/types/data.js +25 -0
- package/dist/esm/types/data.js.map +1 -0
- package/dist/esm/types/events.js +116 -0
- package/dist/esm/types/events.js.map +1 -0
- package/dist/esm/types/index.js +34 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/pipeline.js +25 -0
- package/dist/esm/types/pipeline.js.map +1 -0
- package/dist/esm/types/task.js +112 -0
- package/dist/esm/types/task.js.map +1 -0
- package/dist/types/client.d.ts +798 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/constants.d.ts +45 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/core/DAPBase.d.ts +152 -0
- package/dist/types/core/DAPBase.d.ts.map +1 -0
- package/dist/types/core/DAPClient.d.ts +93 -0
- package/dist/types/core/DAPClient.d.ts.map +1 -0
- package/dist/types/core/TransportBase.d.ts +113 -0
- package/dist/types/core/TransportBase.d.ts.map +1 -0
- package/dist/types/core/TransportWebSocket.d.ts +100 -0
- package/dist/types/core/TransportWebSocket.d.ts.map +1 -0
- package/dist/types/exceptions/index.d.ts +87 -0
- package/dist/types/exceptions/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +36 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/schema/Doc.d.ts +69 -0
- package/dist/types/schema/Doc.d.ts.map +1 -0
- package/dist/types/schema/DocFilter.d.ts +101 -0
- package/dist/types/schema/DocFilter.d.ts.map +1 -0
- package/dist/types/schema/DocGroup.d.ts +113 -0
- package/dist/types/schema/DocGroup.d.ts.map +1 -0
- package/dist/types/schema/DocMetadata.d.ts +77 -0
- package/dist/types/schema/DocMetadata.d.ts.map +1 -0
- package/dist/types/schema/Question.d.ts +163 -0
- package/dist/types/schema/Question.d.ts.map +1 -0
- package/dist/types/schema/index.d.ts +34 -0
- package/dist/types/schema/index.d.ts.map +1 -0
- package/dist/types/types/client.d.ts +149 -0
- package/dist/types/types/client.d.ts.map +1 -0
- package/dist/types/types/data.d.ts +95 -0
- package/dist/types/types/data.d.ts.map +1 -0
- package/dist/types/types/events.d.ts +246 -0
- package/dist/types/types/events.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +34 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/pipeline.d.ts +83 -0
- package/dist/types/types/pipeline.d.ts.map +1 -0
- package/dist/types/types/task.d.ts +314 -0
- package/dist/types/types/task.d.ts.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIT License
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2026 RocketRide, Inc.
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
* furnished to do so, subject to the following conditions:
|
|
12
|
+
*
|
|
13
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
* copies or substantial portions of the Software.
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
* SOFTWARE.
|
|
23
|
+
*/
|
|
24
|
+
import { DAPBase } from './DAPBase';
|
|
25
|
+
import { AuthenticationException } from '../exceptions';
|
|
26
|
+
/**
|
|
27
|
+
* DAP (Debug Adapter Protocol) client for communicating with RocketRide servers.
|
|
28
|
+
*
|
|
29
|
+
* This class implements the client side of the DAP communication protocol,
|
|
30
|
+
* managing request/response correlation, pending request tracking, and message
|
|
31
|
+
* sequencing. It extends DAPBase to inherit common protocol functionality.
|
|
32
|
+
*
|
|
33
|
+
* Key responsibilities:
|
|
34
|
+
* - Request/response correlation via sequence numbers
|
|
35
|
+
* - Pending request management with promises
|
|
36
|
+
* - Connection lifecycle management
|
|
37
|
+
* - Message routing and handling
|
|
38
|
+
*
|
|
39
|
+
* @extends DAPBase
|
|
40
|
+
*/
|
|
41
|
+
export class DAPClient extends DAPBase {
|
|
42
|
+
constructor(module, transport, config = {}) {
|
|
43
|
+
super(module, transport, config);
|
|
44
|
+
this._pendingRequests = new Map();
|
|
45
|
+
this._sequenceNumber = 0;
|
|
46
|
+
this._requestTimeout = config.requestTimeout;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generate the next sequence number for outgoing requests.
|
|
50
|
+
*/
|
|
51
|
+
getNextSeq() {
|
|
52
|
+
return ++this._sequenceNumber;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Send a message to the DAP server through the transport layer.
|
|
56
|
+
*/
|
|
57
|
+
async _send(message) {
|
|
58
|
+
if (!this._transport) {
|
|
59
|
+
throw new Error('Transport not available');
|
|
60
|
+
}
|
|
61
|
+
return this._transport.send(message);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Handle connection established event.
|
|
65
|
+
*/
|
|
66
|
+
async onConnected(connectionInfo) {
|
|
67
|
+
await super.onConnected(connectionInfo);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Handle connection attempt failure.
|
|
71
|
+
*/
|
|
72
|
+
async onConnectError(error) {
|
|
73
|
+
await super.onConnectError(error);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Handle disconnection event and clean up pending requests.
|
|
77
|
+
*/
|
|
78
|
+
async onDisconnected(reason, hasError = false) {
|
|
79
|
+
// Fail all pending requests since connection is lost
|
|
80
|
+
const connectionError = new Error(reason || 'Connection lost');
|
|
81
|
+
for (const [, request] of this._pendingRequests) {
|
|
82
|
+
if (request.timer)
|
|
83
|
+
clearTimeout(request.timer);
|
|
84
|
+
request.reject(connectionError);
|
|
85
|
+
}
|
|
86
|
+
// Clear pending requests
|
|
87
|
+
this._pendingRequests.clear();
|
|
88
|
+
// Notify parent classes
|
|
89
|
+
await super.onDisconnected(reason, hasError);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Handle received messages from the transport layer.
|
|
93
|
+
*/
|
|
94
|
+
async onReceive(message) {
|
|
95
|
+
const messageType = message.type;
|
|
96
|
+
if (messageType === 'response') {
|
|
97
|
+
// Handle response correlation
|
|
98
|
+
const requestSeq = message.request_seq;
|
|
99
|
+
if (requestSeq !== undefined && this._pendingRequests.has(requestSeq)) {
|
|
100
|
+
const pendingRequest = this._pendingRequests.get(requestSeq);
|
|
101
|
+
this._pendingRequests.delete(requestSeq);
|
|
102
|
+
if (pendingRequest.timer)
|
|
103
|
+
clearTimeout(pendingRequest.timer);
|
|
104
|
+
pendingRequest.resolve(message);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.debugMessage(`Response received for unknown request: ${JSON.stringify(message)}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (messageType === 'event') {
|
|
111
|
+
// Forward events to event handler
|
|
112
|
+
await this.onEvent(message);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Unknown message type
|
|
116
|
+
this.debugMessage(`Unhandled message type: ${JSON.stringify(message)}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Send a request and wait for the corresponding response.
|
|
121
|
+
* @param message - The DAP message to send
|
|
122
|
+
* @param timeout - Optional per-request timeout in ms. Overrides the default requestTimeout.
|
|
123
|
+
*/
|
|
124
|
+
async request(message, timeout) {
|
|
125
|
+
// Validate required fields
|
|
126
|
+
if (!message.command) {
|
|
127
|
+
this.raiseException(new Error("Request message must include a 'command' field"));
|
|
128
|
+
}
|
|
129
|
+
if (!message.type) {
|
|
130
|
+
this.raiseException(new Error("Request message must include a 'type' field"));
|
|
131
|
+
}
|
|
132
|
+
// Verify connection
|
|
133
|
+
if (!this._transport?.isConnected()) {
|
|
134
|
+
this.raiseException(new Error('Server is not connected'));
|
|
135
|
+
}
|
|
136
|
+
// Generate sequence number for this request
|
|
137
|
+
const seq = this.getNextSeq();
|
|
138
|
+
message.seq = seq;
|
|
139
|
+
// Create promise for response correlation
|
|
140
|
+
return new Promise((resolve, reject) => {
|
|
141
|
+
const entry = { resolve, reject };
|
|
142
|
+
// Set up request timeout if configured
|
|
143
|
+
const effectiveTimeout = timeout ?? this._requestTimeout;
|
|
144
|
+
if (effectiveTimeout) {
|
|
145
|
+
entry.timer = setTimeout(() => {
|
|
146
|
+
if (this._pendingRequests.has(seq)) {
|
|
147
|
+
this._pendingRequests.delete(seq);
|
|
148
|
+
reject(new Error(`Request timed out after ${effectiveTimeout}ms`));
|
|
149
|
+
}
|
|
150
|
+
}, effectiveTimeout);
|
|
151
|
+
}
|
|
152
|
+
// Store the resolve/reject functions for later use
|
|
153
|
+
this._pendingRequests.set(seq, entry);
|
|
154
|
+
// Send request through transport
|
|
155
|
+
this._send(message)
|
|
156
|
+
.catch(_error => {
|
|
157
|
+
this.debugMessage(`Clearing request due to error: ${seq}`);
|
|
158
|
+
// Clean up on send failure
|
|
159
|
+
if (this._pendingRequests.has(seq)) {
|
|
160
|
+
const pending = this._pendingRequests.get(seq);
|
|
161
|
+
if (pending.timer)
|
|
162
|
+
clearTimeout(pending.timer);
|
|
163
|
+
this._pendingRequests.delete(seq);
|
|
164
|
+
}
|
|
165
|
+
reject(new Error('Could not send request'));
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Establish connection to the DAP server.
|
|
171
|
+
* When the transport exposes getAuth (e.g. task service), sends auth as the first DAP command
|
|
172
|
+
* and fails connect if authentication fails.
|
|
173
|
+
* @param timeout - Optional overall timeout in ms covering both the WebSocket handshake and auth request.
|
|
174
|
+
*/
|
|
175
|
+
async connect(timeout) {
|
|
176
|
+
if (!this._transport) {
|
|
177
|
+
throw new Error('Transport not configured');
|
|
178
|
+
}
|
|
179
|
+
// Track elapsed time so remaining budget can be passed to the auth request
|
|
180
|
+
const start = timeout !== undefined ? Date.now() : 0;
|
|
181
|
+
// Establish transport connection (socket open; no auth on the wire)
|
|
182
|
+
await this._transport.connect(timeout);
|
|
183
|
+
// Calculate remaining timeout for auth request
|
|
184
|
+
let authTimeout;
|
|
185
|
+
if (timeout !== undefined) {
|
|
186
|
+
const elapsed = Date.now() - start;
|
|
187
|
+
authTimeout = Math.max(timeout - elapsed, 0);
|
|
188
|
+
}
|
|
189
|
+
// First DAP message must be auth
|
|
190
|
+
const auth = this._transport.getAuth() ?? '';
|
|
191
|
+
const resp = await this.request({
|
|
192
|
+
type: 'request',
|
|
193
|
+
command: 'auth',
|
|
194
|
+
seq: 0, // request() overwrites with next seq
|
|
195
|
+
arguments: { auth },
|
|
196
|
+
}, authTimeout);
|
|
197
|
+
const success = resp.success;
|
|
198
|
+
if (!success) {
|
|
199
|
+
await this._transport.disconnect(resp.message ?? 'Authentication failed', true);
|
|
200
|
+
throw new AuthenticationException(resp);
|
|
201
|
+
}
|
|
202
|
+
// Only now notify connected (transport resolved on socket open; callback runs after auth)
|
|
203
|
+
const connectionInfo = this._transport.getConnectionInfo();
|
|
204
|
+
await this.onConnected(connectionInfo);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Close connection to the DAP server and clean up resources.
|
|
208
|
+
*/
|
|
209
|
+
async disconnect() {
|
|
210
|
+
// Close transport connection
|
|
211
|
+
if (this._transport) {
|
|
212
|
+
await this._transport.disconnect();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Check if connected to server.
|
|
217
|
+
*/
|
|
218
|
+
isConnected() {
|
|
219
|
+
return this._transport?.isConnected() || false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=DAPClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DAPClient.js","sourceRoot":"","sources":["../../../src/client/core/DAPClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIT License
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2026 RocketRide, Inc.
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
* furnished to do so, subject to the following conditions:
|
|
12
|
+
*
|
|
13
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
* copies or substantial portions of the Software.
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
* SOFTWARE.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Abstract base class for DAP transport implementations.
|
|
26
|
+
*
|
|
27
|
+
* This class defines the standard interface that all transport implementations
|
|
28
|
+
* must follow for DAP communication. It provides common functionality for
|
|
29
|
+
* callback management, connection state tracking, and debug message routing.
|
|
30
|
+
*
|
|
31
|
+
* Concrete implementations must provide:
|
|
32
|
+
* - connect(): Establish the transport connection
|
|
33
|
+
* - disconnect(): Close the transport connection
|
|
34
|
+
* - send(): Transmit a DAP message
|
|
35
|
+
*
|
|
36
|
+
* @abstract This class must be extended by concrete transport implementations
|
|
37
|
+
*/
|
|
38
|
+
export class TransportBase {
|
|
39
|
+
constructor() {
|
|
40
|
+
this._connected = false;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Send debug message to callback if available.
|
|
44
|
+
*/
|
|
45
|
+
_debugMessage(message) {
|
|
46
|
+
if (this._onCallerDebugMessage) {
|
|
47
|
+
this._onCallerDebugMessage(message);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Send protocol debug message to callback if available.
|
|
52
|
+
*/
|
|
53
|
+
_debugProtocol(message) {
|
|
54
|
+
if (this._onCallerDebugProtocol) {
|
|
55
|
+
this._onCallerDebugProtocol(message);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Forward received message to callback if available.
|
|
60
|
+
*/
|
|
61
|
+
async _transportReceive(message) {
|
|
62
|
+
this._debugProtocol(`RECV: ${JSON.stringify(message)}`);
|
|
63
|
+
if (this._onCallerReceive) {
|
|
64
|
+
await this._onCallerReceive(message);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Connection info for the "connected" callback (e.g. URI). Default none.
|
|
69
|
+
*/
|
|
70
|
+
getConnectionInfo() {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Notify about connection establishment.
|
|
75
|
+
*/
|
|
76
|
+
async _transportConnected(connectionInfo) {
|
|
77
|
+
this._debugMessage(`Connected, info=${connectionInfo}`);
|
|
78
|
+
if (this._onCallerConnected) {
|
|
79
|
+
await this._onCallerConnected(connectionInfo);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Notify about connection closure.
|
|
84
|
+
*/
|
|
85
|
+
async _transportDisconnected(reason, hasError = false) {
|
|
86
|
+
this._debugMessage(`Disconnected, reason=${reason}, error=${hasError}`);
|
|
87
|
+
if (this._onCallerDisconnected) {
|
|
88
|
+
await this._onCallerDisconnected(reason, hasError);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Bind callback functions to the transport.
|
|
93
|
+
*
|
|
94
|
+
* This must be called before using the transport for communication.
|
|
95
|
+
* The callbacks handle debugging, connection events, and message processing.
|
|
96
|
+
*/
|
|
97
|
+
bind(callbacks) {
|
|
98
|
+
if (callbacks.onDebugMessage) {
|
|
99
|
+
this._onCallerDebugMessage = callbacks.onDebugMessage;
|
|
100
|
+
}
|
|
101
|
+
if (callbacks.onDebugProtocol) {
|
|
102
|
+
this._onCallerDebugProtocol = callbacks.onDebugProtocol;
|
|
103
|
+
}
|
|
104
|
+
if (callbacks.onReceive) {
|
|
105
|
+
this._onCallerReceive = callbacks.onReceive;
|
|
106
|
+
}
|
|
107
|
+
if (callbacks.onConnected) {
|
|
108
|
+
this._onCallerConnected = callbacks.onConnected;
|
|
109
|
+
}
|
|
110
|
+
if (callbacks.onDisconnected) {
|
|
111
|
+
this._onCallerDisconnected = callbacks.onDisconnected;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Auth credential for connect flow (e.g. first DAP auth command). Default none.
|
|
116
|
+
*/
|
|
117
|
+
getAuth() {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Update auth credential. Takes effect on the next connect().
|
|
122
|
+
*/
|
|
123
|
+
setAuth(_auth) { }
|
|
124
|
+
/**
|
|
125
|
+
* Update connection URI. Takes effect on the next connect().
|
|
126
|
+
*/
|
|
127
|
+
setUri(_uri) { }
|
|
128
|
+
/**
|
|
129
|
+
* Check if the transport is currently connected.
|
|
130
|
+
*/
|
|
131
|
+
isConnected() {
|
|
132
|
+
return this._connected;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Establish connection to remote endpoint (client-side).
|
|
136
|
+
* @param timeout - Optional connection timeout in milliseconds. Falls back to default when not provided.
|
|
137
|
+
*/
|
|
138
|
+
async connect(_timeout) {
|
|
139
|
+
// Default implementation - override in concrete classes
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Accept incoming connection (server-side).
|
|
143
|
+
*/
|
|
144
|
+
async accept(_connectionInfo) {
|
|
145
|
+
// Default implementation - override in concrete classes
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=TransportBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransportBase.js","sourceRoot":"","sources":["../../../src/client/core/TransportBase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAgB,aAAa;IAAnC;QACW,eAAU,GAAG,KAAK,CAAC;IAwI9B,CAAC;IAjIA;;OAEG;IACO,aAAa,CAAC,OAAe;QACtC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,OAAe;QACvC,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACjC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,iBAAiB,CAAC,OAAmB;QACpD,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAED;;OAEG;IACH,iBAAiB;QAChB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,mBAAmB,CAAC,cAAuB;QAC1D,IAAI,CAAC,aAAa,CAAC,mBAAmB,cAAc,EAAE,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,sBAAsB,CAAC,MAAe,EAAE,QAAQ,GAAG,KAAK;QACvE,IAAI,CAAC,aAAa,CAAC,wBAAwB,MAAM,WAAW,QAAQ,EAAE,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,SAA6B;QACjC,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YAC9B,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,cAAc,CAAC;QACvD,CAAC;QACD,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC,eAAe,CAAC;QACzD,CAAC;QACD,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC;QAC7C,CAAC;QACD,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,WAAW,CAAC;QACjD,CAAC;QACD,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YAC9B,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,cAAc,CAAC;QACvD,CAAC;IACF,CAAC;IAED;;OAEG;IACH,OAAO;QACN,OAAO,SAAS,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAa,IAAU,CAAC;IAEhC;;OAEG;IACH,MAAM,CAAC,IAAY,IAAU,CAAC;IAE9B;;OAEG;IACH,WAAW;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,QAAiB;QAC9B,wDAAwD;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,eAAwB;QACpC,wDAAwD;IACzD,CAAC;CAaD"}
|