@athenafleet/bridge 1.0.0 → 1.0.1
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/client.d.ts +2 -0
- package/dist/client.js +50 -7
- package/dist/client.js.map +1 -1
- package/dist/gateway.d.ts +9 -10
- package/dist/gateway.js +14 -19
- package/dist/gateway.js.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export declare class BridgeClient {
|
|
|
22
22
|
private intentionalClose;
|
|
23
23
|
private lastAgents;
|
|
24
24
|
private gatewayConnected;
|
|
25
|
+
private syncInFlight;
|
|
26
|
+
private syncPending;
|
|
25
27
|
constructor(options: BridgeOptions);
|
|
26
28
|
/**
|
|
27
29
|
* Start the bridge. Connects and begins sync loop.
|
package/dist/client.js
CHANGED
|
@@ -20,6 +20,9 @@ const SYNC_INTERVAL_MS = 60_000; // 1/min (server rate limit)
|
|
|
20
20
|
const BASE_BACKOFF_MS = 1_000;
|
|
21
21
|
const MAX_BACKOFF_MS = 30_000;
|
|
22
22
|
const JITTER_FACTOR = 0.25; // ±25%
|
|
23
|
+
// H-003 (CCQ-67): Clamp server-provided heartbeat interval
|
|
24
|
+
const MIN_HEARTBEAT_MS = 5_000;
|
|
25
|
+
const MAX_HEARTBEAT_MS = 300_000;
|
|
23
26
|
// =============================================================================
|
|
24
27
|
// Bridge Client
|
|
25
28
|
// =============================================================================
|
|
@@ -39,6 +42,11 @@ export class BridgeClient {
|
|
|
39
42
|
// Cached agent data
|
|
40
43
|
lastAgents = [];
|
|
41
44
|
gatewayConnected = false;
|
|
45
|
+
// H-004 (CCQ-67): Prevent overlapping syncs
|
|
46
|
+
syncInFlight = false;
|
|
47
|
+
// M-001 R2: Coalesce missed syncs — if a sync request arrives while one is in flight,
|
|
48
|
+
// set this flag so we re-sync immediately after the current one completes.
|
|
49
|
+
syncPending = false;
|
|
42
50
|
constructor(options) {
|
|
43
51
|
this.options = options;
|
|
44
52
|
}
|
|
@@ -163,10 +171,19 @@ export class BridgeClient {
|
|
|
163
171
|
}
|
|
164
172
|
}
|
|
165
173
|
handleAuthOk(runtimeId, heartbeatIntervalMs) {
|
|
174
|
+
// M-002 R2: Clear existing timers before setting new ones (prevents leaks on duplicate auth)
|
|
175
|
+
this.clearTimers();
|
|
166
176
|
this.runtimeId = runtimeId;
|
|
167
|
-
|
|
177
|
+
// H-002 R2: Guard against NaN — Math.max(5000, Math.min(NaN, 300000)) = NaN → ~1ms setInterval
|
|
178
|
+
const raw = heartbeatIntervalMs;
|
|
179
|
+
this.heartbeatIntervalMs = Number.isFinite(raw)
|
|
180
|
+
? Math.max(MIN_HEARTBEAT_MS, Math.min(raw, MAX_HEARTBEAT_MS))
|
|
181
|
+
: 30_000; // fallback default
|
|
168
182
|
this.reconnectAttempt = 0; // Reset backoff on successful auth
|
|
169
|
-
|
|
183
|
+
if (this.heartbeatIntervalMs !== raw) {
|
|
184
|
+
log.warn(`Server heartbeat ${raw}ms → ${this.heartbeatIntervalMs}ms (clamped/defaulted)`);
|
|
185
|
+
}
|
|
186
|
+
log.info(`✓ Authenticated (runtime=${runtimeId}, heartbeat=${this.heartbeatIntervalMs}ms)`);
|
|
170
187
|
// Start heartbeat
|
|
171
188
|
this.heartbeatTimer = setInterval(() => {
|
|
172
189
|
this.sendHealthPing();
|
|
@@ -181,22 +198,48 @@ export class BridgeClient {
|
|
|
181
198
|
// Agent sync
|
|
182
199
|
// ===========================================================================
|
|
183
200
|
async syncAgents() {
|
|
201
|
+
// H-004 (CCQ-67): Prevent overlapping syncs from startup + timer + server request
|
|
202
|
+
if (this.syncInFlight) {
|
|
203
|
+
// M-001 R2: Mark pending so we re-sync after current one completes
|
|
204
|
+
this.syncPending = true;
|
|
205
|
+
log.debug('Sync already in flight, marked pending');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
this.syncInFlight = true;
|
|
209
|
+
this.syncPending = false;
|
|
184
210
|
try {
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
211
|
+
const result = await fetchAgents(this.options.openclawUrl);
|
|
212
|
+
// C-001 (CCQ-67): On gateway error, keep last snapshot — don't send
|
|
213
|
+
// empty sync that would wipe agents on the server.
|
|
214
|
+
if (!result.ok) {
|
|
215
|
+
log.warn(`Gateway fetch failed: ${result.error} — keeping last snapshot`);
|
|
216
|
+
// M-002 (CCQ-67): gateway_connected driven by transport success
|
|
217
|
+
this.gatewayConnected = false;
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
this.lastAgents = result.data;
|
|
221
|
+
// M-002: Connected = successful transport, even with 0 agents
|
|
222
|
+
this.gatewayConnected = true;
|
|
188
223
|
this.send({
|
|
189
224
|
type: 'agents.sync',
|
|
190
|
-
agents,
|
|
225
|
+
agents: result.data,
|
|
191
226
|
gateway_id: this.options.gatewayId,
|
|
192
227
|
timestamp: new Date().toISOString(),
|
|
193
228
|
});
|
|
194
|
-
log.info(`Synced ${
|
|
229
|
+
log.info(`Synced ${result.data.length} agent(s)`);
|
|
195
230
|
}
|
|
196
231
|
catch (err) {
|
|
197
232
|
log.error('Agent sync failed', err);
|
|
198
233
|
this.gatewayConnected = false;
|
|
199
234
|
}
|
|
235
|
+
finally {
|
|
236
|
+
this.syncInFlight = false;
|
|
237
|
+
// M-001 R2: If a sync was requested while we were busy, run it now
|
|
238
|
+
if (this.syncPending) {
|
|
239
|
+
this.syncPending = false;
|
|
240
|
+
void this.syncAgents();
|
|
241
|
+
}
|
|
242
|
+
}
|
|
200
243
|
}
|
|
201
244
|
// ===========================================================================
|
|
202
245
|
// Health ping
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway.d.ts
CHANGED
|
@@ -2,18 +2,17 @@
|
|
|
2
2
|
* @athenafleet/bridge — Gateway Data Collector
|
|
3
3
|
*
|
|
4
4
|
* Fetches agent data from the local OpenClaw gateway.
|
|
5
|
-
*
|
|
5
|
+
* C-001 (CCQ-67): Returns discriminated result — callers must check ok flag.
|
|
6
6
|
*/
|
|
7
7
|
import type { SyncedAgent } from './types.js';
|
|
8
|
+
export type FetchResult = {
|
|
9
|
+
ok: true;
|
|
10
|
+
data: SyncedAgent[];
|
|
11
|
+
} | {
|
|
12
|
+
ok: false;
|
|
13
|
+
error: string;
|
|
14
|
+
};
|
|
8
15
|
/**
|
|
9
16
|
* Fetch agent list from local OpenClaw gateway.
|
|
10
|
-
*
|
|
11
|
-
* Expected response shape from OpenClaw /api/agents:
|
|
12
|
-
* ```json
|
|
13
|
-
* [{ "id": "...", "name": "...", "emoji": "...", "status": "...", ... }]
|
|
14
|
-
* ```
|
|
15
|
-
*
|
|
16
|
-
* Fields are mapped to the SyncedAgent shape expected by the server.
|
|
17
|
-
* Missing fields get safe defaults.
|
|
18
17
|
*/
|
|
19
|
-
export declare function fetchAgents(openclawUrl: string): Promise<
|
|
18
|
+
export declare function fetchAgents(openclawUrl: string): Promise<FetchResult>;
|
package/dist/gateway.js
CHANGED
|
@@ -2,49 +2,44 @@
|
|
|
2
2
|
* @athenafleet/bridge — Gateway Data Collector
|
|
3
3
|
*
|
|
4
4
|
* Fetches agent data from the local OpenClaw gateway.
|
|
5
|
-
*
|
|
5
|
+
* C-001 (CCQ-67): Returns discriminated result — callers must check ok flag.
|
|
6
6
|
*/
|
|
7
7
|
import * as log from './logger.js';
|
|
8
8
|
/**
|
|
9
9
|
* Fetch agent list from local OpenClaw gateway.
|
|
10
|
-
*
|
|
11
|
-
* Expected response shape from OpenClaw /api/agents:
|
|
12
|
-
* ```json
|
|
13
|
-
* [{ "id": "...", "name": "...", "emoji": "...", "status": "...", ... }]
|
|
14
|
-
* ```
|
|
15
|
-
*
|
|
16
|
-
* Fields are mapped to the SyncedAgent shape expected by the server.
|
|
17
|
-
* Missing fields get safe defaults.
|
|
18
10
|
*/
|
|
19
11
|
export async function fetchAgents(openclawUrl) {
|
|
20
12
|
const url = `${openclawUrl.replace(/\/+$/, '')}/api/agents`;
|
|
13
|
+
const controller = new AbortController();
|
|
14
|
+
const timeout = setTimeout(() => controller.abort(), 5_000);
|
|
21
15
|
try {
|
|
22
|
-
const controller = new AbortController();
|
|
23
|
-
const timeout = setTimeout(() => controller.abort(), 5_000);
|
|
24
16
|
const res = await fetch(url, {
|
|
25
17
|
signal: controller.signal,
|
|
26
18
|
headers: { Accept: 'application/json' },
|
|
27
19
|
});
|
|
28
|
-
clearTimeout(timeout);
|
|
29
20
|
if (!res.ok) {
|
|
30
21
|
log.warn(`Gateway returned ${res.status} from ${url}`);
|
|
31
|
-
return
|
|
22
|
+
return { ok: false, error: `HTTP ${res.status}` };
|
|
32
23
|
}
|
|
33
24
|
const data = await res.json();
|
|
34
25
|
if (!Array.isArray(data)) {
|
|
35
26
|
log.warn('Gateway /api/agents did not return an array');
|
|
36
|
-
return
|
|
27
|
+
return { ok: false, error: 'Non-array response' };
|
|
37
28
|
}
|
|
38
|
-
|
|
29
|
+
const agents = data.map(sanitizeAgent).filter((a) => a !== null);
|
|
30
|
+
return { ok: true, data: agents };
|
|
39
31
|
}
|
|
40
32
|
catch (err) {
|
|
41
33
|
if (err instanceof Error && err.name === 'AbortError') {
|
|
42
34
|
log.debug('Gateway request timed out');
|
|
35
|
+
return { ok: false, error: 'Timeout' };
|
|
43
36
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
37
|
+
log.debug('Gateway unreachable', { error: err instanceof Error ? err.message : String(err) });
|
|
38
|
+
return { ok: false, error: err instanceof Error ? err.message : 'Unknown error' };
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
// M-001 (CCQ-67): clearTimeout in finally — always runs
|
|
42
|
+
clearTimeout(timeout);
|
|
48
43
|
}
|
|
49
44
|
}
|
|
50
45
|
/**
|
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAQnC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB;IACnD,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC;IAE5D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC;YACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QACpD,CAAC;QAED,MAAM,IAAI,GAAY,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YACxD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;QACpD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACnF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACtD,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACvC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzC,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IACpF,CAAC;YAAS,CAAC;QACT,wDAAwD;QACxD,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAY;IACjC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEzD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE/C,OAAO;QACL,EAAE;QACF,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACrD,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QACnD,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC3D,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACjD,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnD,aAAa,EAAE,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC/F,YAAY,EAAE,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KACtE,CAAC;AACJ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,8 @@ import { setVerbose } from './logger.js';
|
|
|
13
13
|
// Argument parsing (zero deps — just process.argv)
|
|
14
14
|
// =============================================================================
|
|
15
15
|
function parseArgs(argv) {
|
|
16
|
-
|
|
16
|
+
// H-002 (CCQ-67): Support env var as primary credential source
|
|
17
|
+
let key = process.env.ATHENA_BRIDGE_TOKEN;
|
|
17
18
|
let apiUrl = 'https://api.athenafleet.ai';
|
|
18
19
|
let gatewayId = hostname();
|
|
19
20
|
let openclawUrl = 'http://localhost:3007';
|
|
@@ -62,7 +63,7 @@ function parseArgs(argv) {
|
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
if (!key) {
|
|
65
|
-
console.error('Error: --key is required\n');
|
|
66
|
+
console.error('Error: --key or ATHENA_BRIDGE_TOKEN env var is required\n');
|
|
66
67
|
printHelp();
|
|
67
68
|
process.exit(1);
|
|
68
69
|
}
|
|
@@ -70,6 +71,26 @@ function parseArgs(argv) {
|
|
|
70
71
|
console.error('Error: key must start with rtk_ prefix\n');
|
|
71
72
|
process.exit(1);
|
|
72
73
|
}
|
|
74
|
+
// H-001 R2: Validate API URL scheme with proper URL parsing.
|
|
75
|
+
// Prevents bypass via http://localhost.evil.com (substring match).
|
|
76
|
+
let parsedUrl;
|
|
77
|
+
try {
|
|
78
|
+
parsedUrl = new URL(apiUrl);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
console.error('⚠️ ERROR: --api-url is not a valid URL.');
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const LOCAL_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]', '::1']);
|
|
85
|
+
const isLocal = LOCAL_HOSTS.has(parsedUrl.hostname);
|
|
86
|
+
if (parsedUrl.protocol === 'http:' && !isLocal) {
|
|
87
|
+
console.error('⚠️ ERROR: --api-url uses http:// — API key would be sent in cleartext.');
|
|
88
|
+
console.error(' Use https:// or set --api-url to a localhost address for development.');
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
if (parsedUrl.protocol === 'http:' && isLocal) {
|
|
92
|
+
console.warn('⚠️ WARNING: --api-url uses http:// (localhost). Do not use in production.');
|
|
93
|
+
}
|
|
73
94
|
return { key, apiUrl, gatewayId, openclawUrl, verbose };
|
|
74
95
|
}
|
|
75
96
|
function printHelp() {
|
|
@@ -80,7 +101,7 @@ function printHelp() {
|
|
|
80
101
|
athena-bridge --key rtk_xxx [options]
|
|
81
102
|
|
|
82
103
|
Options:
|
|
83
|
-
--key, -k <key> Runtime API key (
|
|
104
|
+
--key, -k <key> Runtime API key (rtk_ prefix, or set ATHENA_BRIDGE_TOKEN)
|
|
84
105
|
--api-url <url> Athena API URL (default: https://api.athenafleet.ai)
|
|
85
106
|
--gateway-id <id> Gateway identifier (default: hostname)
|
|
86
107
|
--openclaw-url <url> Local OpenClaw URL (default: http://localhost:3007)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,gFAAgF;AAChF,mDAAmD;AACnD,gFAAgF;AAEhF,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,GAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|