@agentbean/daemon 0.1.19 → 0.1.21
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/device-daemon.js +2 -0
- package/dist/index.js +32 -7
- package/package.json +2 -1
package/dist/device-daemon.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -187,28 +187,53 @@ function normalizeAgentUrl(serverUrl) {
|
|
|
187
187
|
const base = normalizeBaseUrl(serverUrl);
|
|
188
188
|
return `${base}/agent`;
|
|
189
189
|
}
|
|
190
|
+
export const INVITE_CONNECTION_TIMEOUT_MS = 20_000;
|
|
191
|
+
export function createInviteSocketOptions() {
|
|
192
|
+
return {
|
|
193
|
+
auth: { invite: true },
|
|
194
|
+
reconnection: false,
|
|
195
|
+
timeout: INVITE_CONNECTION_TIMEOUT_MS,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
export function socketErrorMessage(err) {
|
|
199
|
+
const details = [
|
|
200
|
+
err?.message,
|
|
201
|
+
err?.description?.message,
|
|
202
|
+
err?.context?.statusText?.code,
|
|
203
|
+
err?.context?.statusText?.message,
|
|
204
|
+
err?.context?.responseText,
|
|
205
|
+
]
|
|
206
|
+
.filter((value) => typeof value === 'string' && value.trim())
|
|
207
|
+
.map((value) => value.trim());
|
|
208
|
+
return [...new Set(details)].join(': ') || 'unknown socket error';
|
|
209
|
+
}
|
|
190
210
|
async function runInviteMode(serverUrl, inviteCode) {
|
|
191
211
|
const { io } = await import('socket.io-client');
|
|
192
212
|
const { execFile } = await import('node:child_process');
|
|
193
213
|
const baseUrl = normalizeBaseUrl(serverUrl);
|
|
194
214
|
const webSocketUrl = `${baseUrl}/web`;
|
|
215
|
+
console.log(`Connecting to AgentBean at ${baseUrl}...`);
|
|
195
216
|
logger.info({ serverUrl: baseUrl, inviteCode }, 'invite mode: connecting to server');
|
|
196
|
-
const socket = io(webSocketUrl,
|
|
197
|
-
auth: { invite: true },
|
|
198
|
-
transports: ['websocket'],
|
|
199
|
-
reconnection: false,
|
|
200
|
-
});
|
|
217
|
+
const socket = io(webSocketUrl, createInviteSocketOptions());
|
|
201
218
|
return new Promise((resolve, reject) => {
|
|
219
|
+
let connectTimer;
|
|
202
220
|
const fail = (err) => {
|
|
221
|
+
clearTimeout(connectTimer);
|
|
203
222
|
socket.disconnect();
|
|
204
223
|
reject(err);
|
|
205
224
|
};
|
|
225
|
+
connectTimer = setTimeout(() => {
|
|
226
|
+
fail(new Error(`connection timed out after 20s. Check network access to ${baseUrl} and try again.`));
|
|
227
|
+
}, INVITE_CONNECTION_TIMEOUT_MS);
|
|
206
228
|
socket.on('connect_error', (err) => {
|
|
207
|
-
|
|
208
|
-
|
|
229
|
+
const message = socketErrorMessage(err);
|
|
230
|
+
logger.error({ err: message }, 'invite mode: connection failed');
|
|
231
|
+
fail(new Error(`connection failed: ${message}`));
|
|
209
232
|
});
|
|
210
233
|
socket.on('connect', () => {
|
|
234
|
+
clearTimeout(connectTimer);
|
|
211
235
|
logger.info('invite mode: connected, validating invite code');
|
|
236
|
+
console.log('Connected. Validating invite code...');
|
|
212
237
|
socket.emit('auth:invite:validate', { code: inviteCode }, (res) => {
|
|
213
238
|
if (!res?.ok) {
|
|
214
239
|
fail(new Error(res?.error ?? 'invalid invite code'));
|
package/package.json
CHANGED