@aerostack/openclaw-bridge 0.1.1 → 0.11.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/dist/index.js CHANGED
@@ -24,12 +24,18 @@
24
24
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
25
25
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
26
26
  import { ListToolsRequestSchema, CallToolRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
27
+ import { resolveApproval } from './resolution.js';
28
+ import { info, error as logError } from './logger.js';
27
29
  // ── Config ─────────────────────────────────────────────────────────
28
30
  const WORKSPACE_URL = process.env.AEROSTACK_WORKSPACE_URL;
29
31
  const TOKEN = process.env.AEROSTACK_TOKEN;
30
- const APPROVAL_POLL_INTERVAL_MS = parseInt(process.env.AEROSTACK_APPROVAL_POLL_MS ?? '3000', 10);
31
- const APPROVAL_TIMEOUT_MS = parseInt(process.env.AEROSTACK_APPROVAL_TIMEOUT_MS ?? '300000', 10); // 5 min
32
- const REQUEST_TIMEOUT_MS = parseInt(process.env.AEROSTACK_REQUEST_TIMEOUT_MS ?? '30000', 10);
32
+ function parsePositiveInt(val, fallback, min) {
33
+ const n = parseInt(val ?? String(fallback), 10);
34
+ return Number.isFinite(n) && n >= min ? n : fallback;
35
+ }
36
+ const APPROVAL_POLL_INTERVAL_MS = parsePositiveInt(process.env.AEROSTACK_APPROVAL_POLL_MS, 3000, 500);
37
+ const APPROVAL_TIMEOUT_MS = parsePositiveInt(process.env.AEROSTACK_APPROVAL_TIMEOUT_MS, 300000, 5000);
38
+ const REQUEST_TIMEOUT_MS = parsePositiveInt(process.env.AEROSTACK_REQUEST_TIMEOUT_MS, 30000, 1000);
33
39
  if (!WORKSPACE_URL) {
34
40
  process.stderr.write('ERROR: AEROSTACK_WORKSPACE_URL is required\n');
35
41
  process.exit(1);
@@ -38,7 +44,21 @@ if (!TOKEN) {
38
44
  process.stderr.write('ERROR: AEROSTACK_TOKEN is required\n');
39
45
  process.exit(1);
40
46
  }
41
- // Strip trailing slash
47
+ // Validate URL — prevent SSRF via misconfigured env var
48
+ let parsedUrl;
49
+ try {
50
+ parsedUrl = new URL(WORKSPACE_URL);
51
+ if (parsedUrl.protocol !== 'https:' && parsedUrl.protocol !== 'http:') {
52
+ throw new Error('must be http or https');
53
+ }
54
+ }
55
+ catch {
56
+ process.stderr.write('ERROR: AEROSTACK_WORKSPACE_URL must be a valid HTTP(S) URL\n');
57
+ process.exit(1);
58
+ }
59
+ if (parsedUrl.protocol === 'http:' && !parsedUrl.hostname.match(/^(localhost|127\.0\.0\.1)$/)) {
60
+ process.stderr.write('WARNING: Using HTTP (not HTTPS) — token will be sent in plaintext\n');
61
+ }
42
62
  const baseUrl = WORKSPACE_URL.replace(/\/+$/, '');
43
63
  async function rpcCall(method, params) {
44
64
  const body = {
@@ -55,7 +75,7 @@ async function rpcCall(method, params) {
55
75
  headers: {
56
76
  'Content-Type': 'application/json',
57
77
  'Authorization': `Bearer ${TOKEN}`,
58
- 'User-Agent': 'aerostack-openclaw-bridge/0.1.0',
78
+ 'User-Agent': 'aerostack-openclaw-bridge/0.11.0',
59
79
  'X-Agent-Id': 'openclaw',
60
80
  },
61
81
  body: JSON.stringify(body),
@@ -95,46 +115,6 @@ function parseSSEResponse(text, requestId) {
95
115
  }
96
116
  return lastData ?? { jsonrpc: '2.0', id: requestId, error: { code: -32603, message: 'Empty SSE response' } };
97
117
  }
98
- async function pollApproval(approvalId) {
99
- const pollUrl = `${baseUrl}/approval-status/${approvalId}`;
100
- const deadline = Date.now() + APPROVAL_TIMEOUT_MS;
101
- process.stderr.write(`[aerostack-bridge] Tool requires approval (${approvalId}). Waiting...\n`);
102
- while (Date.now() < deadline) {
103
- await sleep(APPROVAL_POLL_INTERVAL_MS);
104
- try {
105
- const res = await fetch(pollUrl, {
106
- headers: { 'User-Agent': 'aerostack-openclaw-bridge/0.1.0' },
107
- });
108
- if (!res.ok)
109
- continue;
110
- const status = await res.json();
111
- if (status.status === 'executed') {
112
- process.stderr.write(`[aerostack-bridge] Approved and executed.\n`);
113
- return status;
114
- }
115
- if (status.status === 'approved') {
116
- process.stderr.write(`[aerostack-bridge] Approved. Retrying tool call...\n`);
117
- return status;
118
- }
119
- if (status.status === 'rejected') {
120
- process.stderr.write(`[aerostack-bridge] Rejected: ${status.reviewer_note ?? 'no reason given'}\n`);
121
- return status;
122
- }
123
- if (status.status === 'expired') {
124
- process.stderr.write(`[aerostack-bridge] Approval expired.\n`);
125
- return status;
126
- }
127
- // still pending — keep polling
128
- }
129
- catch {
130
- // network error — keep trying
131
- }
132
- }
133
- return { id: approvalId, status: 'expired', tool_name: '' };
134
- }
135
- function sleep(ms) {
136
- return new Promise(resolve => setTimeout(resolve, ms));
137
- }
138
118
  // ── Handle tools/call with approval retry ──────────────────────────
139
119
  async function callToolWithApproval(name, args) {
140
120
  const response = await rpcCall('tools/call', { name, arguments: args });
@@ -142,25 +122,35 @@ async function callToolWithApproval(name, args) {
142
122
  if (response.error?.code === -32050) {
143
123
  const data = response.error.data;
144
124
  const approvalId = data?.approval_id;
145
- if (!approvalId) {
125
+ if (!approvalId || !/^[a-zA-Z0-9_-]{4,128}$/.test(approvalId)) {
146
126
  return { jsonrpc: '2.0', id: response.id, error: { code: -32603, message: 'Approval required but no approval_id returned' } };
147
127
  }
148
- const status = await pollApproval(approvalId);
149
- if (status.status === 'rejected') {
128
+ info('Tool requires approval, waiting for resolution', { approvalId, transport: data?.ws_url ? 'ws' : 'poll' });
129
+ // Resolve via WebSocket (primary) or polling (fallback)
130
+ const pollUrl = data?.polling_url ?? `${baseUrl}/approval-status/${approvalId}`;
131
+ const result = await resolveApproval({
132
+ approvalId,
133
+ wsUrl: data?.ws_url,
134
+ pollUrl,
135
+ pollIntervalMs: APPROVAL_POLL_INTERVAL_MS,
136
+ timeoutMs: APPROVAL_TIMEOUT_MS,
137
+ });
138
+ if (result.status === 'rejected') {
150
139
  return {
151
140
  jsonrpc: '2.0',
152
141
  id: response.id,
153
- error: { code: -32603, message: `Tool call rejected: ${status.reviewer_note ?? 'no reason given'}` },
142
+ error: { code: -32603, message: `Tool call rejected: ${result.reviewer_note ?? 'no reason given'}` },
154
143
  };
155
144
  }
156
- if (status.status === 'expired') {
145
+ if (result.status === 'expired') {
157
146
  return {
158
147
  jsonrpc: '2.0',
159
148
  id: response.id,
160
149
  error: { code: -32603, message: 'Approval request expired' },
161
150
  };
162
151
  }
163
- // Approved — retry the tool call (gateway will find the cached approval)
152
+ // Approved or executed — retry the tool call (gateway returns cached result)
153
+ info('Retrying tool call after approval', { approvalId, status: result.status });
164
154
  return rpcCall('tools/call', { name, arguments: args });
165
155
  }
166
156
  return response;
@@ -173,7 +163,7 @@ async function ensureInitialized() {
173
163
  const res = await rpcCall('initialize', {
174
164
  protocolVersion: '2024-11-05',
175
165
  capabilities: {},
176
- clientInfo: { name: 'aerostack-openclaw-bridge', version: '0.1.0' },
166
+ clientInfo: { name: 'aerostack-openclaw-bridge', version: '0.10.1' },
177
167
  });
178
168
  if (res.result) {
179
169
  const r = res.result;
@@ -183,7 +173,7 @@ async function ensureInitialized() {
183
173
  };
184
174
  }
185
175
  }
186
- const server = new Server({ name: 'aerostack-openclaw-bridge', version: '0.1.0' }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
176
+ const server = new Server({ name: 'aerostack-openclaw-bridge', version: '0.10.1' }, { capabilities: { tools: {}, resources: {}, prompts: {} } });
187
177
  // ── tools/list ─────────────────────────────────────────────────────
188
178
  server.setRequestHandler(ListToolsRequestSchema, async () => {
189
179
  await ensureInitialized();
@@ -253,13 +243,13 @@ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
253
243
  });
254
244
  // ── Start ──────────────────────────────────────────────────────────
255
245
  async function main() {
256
- process.stderr.write(`[aerostack-bridge] Connecting to ${baseUrl}\n`);
246
+ info('Connecting to workspace', { url: baseUrl });
257
247
  const transport = new StdioServerTransport();
258
248
  await server.connect(transport);
259
- process.stderr.write(`[aerostack-bridge] Ready. Workspace: ${baseUrl}\n`);
249
+ info('Ready', { url: baseUrl });
260
250
  }
261
251
  main().catch((err) => {
262
- process.stderr.write(`[aerostack-bridge] Fatal: ${err}\n`);
252
+ logError('Fatal error', { error: err instanceof Error ? err.message : String(err) });
263
253
  process.exit(1);
264
254
  });
265
255
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Structured logger for aerostack-openclaw-bridge.
3
+ * Writes JSON to stderr so it doesn't interfere with stdio MCP transport.
4
+ */
5
+ declare const LEVELS: {
6
+ readonly debug: 0;
7
+ readonly info: 1;
8
+ readonly warn: 2;
9
+ readonly error: 3;
10
+ };
11
+ type Level = keyof typeof LEVELS;
12
+ export declare function log(level: Level, msg: string, extra?: Record<string, unknown>): void;
13
+ export declare const debug: (msg: string, extra?: Record<string, unknown>) => void;
14
+ export declare const info: (msg: string, extra?: Record<string, unknown>) => void;
15
+ export declare const warn: (msg: string, extra?: Record<string, unknown>) => void;
16
+ export declare const error: (msg: string, extra?: Record<string, unknown>) => void;
17
+ export {};
package/dist/logger.js ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Structured logger for aerostack-openclaw-bridge.
3
+ * Writes JSON to stderr so it doesn't interfere with stdio MCP transport.
4
+ */
5
+ const LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
6
+ const configured = (() => {
7
+ const raw = (process.env.AEROSTACK_LOG_LEVEL ?? 'info').toLowerCase();
8
+ return raw in LEVELS ? raw : 'info';
9
+ })();
10
+ export function log(level, msg, extra) {
11
+ if (LEVELS[level] < LEVELS[configured])
12
+ return;
13
+ const entry = {
14
+ ts: new Date().toISOString(),
15
+ level,
16
+ msg,
17
+ ...extra,
18
+ };
19
+ process.stderr.write(JSON.stringify(entry) + '\n');
20
+ }
21
+ export const debug = (msg, extra) => log('debug', msg, extra);
22
+ export const info = (msg, extra) => log('info', msg, extra);
23
+ export const warn = (msg, extra) => log('warn', msg, extra);
24
+ export const error = (msg, extra) => log('error', msg, extra);
25
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAW,CAAC;AAGjE,MAAM,UAAU,GAAU,CAAC,GAAG,EAAE;IAC5B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACtE,OAAO,GAAG,IAAI,MAAM,CAAC,CAAC,CAAE,GAAa,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,GAAW,EAAE,KAA+B;IAC1E,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO;IAC/C,MAAM,KAAK,GAA4B;QACnC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,KAAK;QACL,GAAG;QACH,GAAG,KAAK;KACX,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * ApprovalResolver — WebSocket-first approval resolution with polling fallback.
3
+ *
4
+ * Strategy:
5
+ * 1. Primary: Connect WebSocket to ws_url (zero-poll, instant wake via ApprovalGateDO)
6
+ * 2. Safety net: Slow background poll every 30s (catches lost DO signals)
7
+ * 3. Fallback: If WS upgrade fails, full polling at 3s intervals (legacy behavior)
8
+ *
9
+ * The WS carries status-only messages ({ status: 'executed' | 'approved' | 'rejected' | 'expired' }).
10
+ * Full results are NOT sent via WS (CF 1MB limit). The caller retries the original
11
+ * tools/call to get the cached result through the normal gateway path.
12
+ */
13
+ export interface ApprovalResult {
14
+ status: 'approved' | 'executed' | 'rejected' | 'expired';
15
+ reviewer_note?: string;
16
+ }
17
+ interface ResolveOptions {
18
+ approvalId: string;
19
+ wsUrl?: string;
20
+ pollUrl: string;
21
+ pollIntervalMs: number;
22
+ timeoutMs: number;
23
+ }
24
+ export declare function resolveApproval(opts: ResolveOptions): Promise<ApprovalResult>;
25
+ export {};
@@ -0,0 +1,205 @@
1
+ /**
2
+ * ApprovalResolver — WebSocket-first approval resolution with polling fallback.
3
+ *
4
+ * Strategy:
5
+ * 1. Primary: Connect WebSocket to ws_url (zero-poll, instant wake via ApprovalGateDO)
6
+ * 2. Safety net: Slow background poll every 30s (catches lost DO signals)
7
+ * 3. Fallback: If WS upgrade fails, full polling at 3s intervals (legacy behavior)
8
+ *
9
+ * The WS carries status-only messages ({ status: 'executed' | 'approved' | 'rejected' | 'expired' }).
10
+ * Full results are NOT sent via WS (CF 1MB limit). The caller retries the original
11
+ * tools/call to get the cached result through the normal gateway path.
12
+ */
13
+ import { info, warn, debug } from './logger.js';
14
+ export async function resolveApproval(opts) {
15
+ const { approvalId, wsUrl, pollUrl, pollIntervalMs, timeoutMs } = opts;
16
+ const deadline = Date.now() + timeoutMs;
17
+ // Try WebSocket first if ws_url is available
18
+ if (wsUrl) {
19
+ try {
20
+ return await resolveViaWebSocket(approvalId, wsUrl, pollUrl, deadline);
21
+ }
22
+ catch (err) {
23
+ const msg = err instanceof Error ? err.message : 'Unknown WS error';
24
+ warn('WebSocket resolution failed, falling back to polling', { approvalId, error: msg });
25
+ }
26
+ }
27
+ // Fallback: full polling
28
+ return resolveViaPolling(approvalId, pollUrl, pollIntervalMs, deadline);
29
+ }
30
+ // ── WebSocket Resolution ────────────────────────────────────────────────────
31
+ async function resolveViaWebSocket(approvalId, wsUrl, pollUrl, deadline) {
32
+ // Dynamic import — ws is only needed for WS path, not for polling-only
33
+ const WebSocketImpl = await getWebSocket();
34
+ return new Promise((resolve, reject) => {
35
+ let settled = false;
36
+ let slowPollTimer = null;
37
+ let timeoutTimer = null;
38
+ const cleanup = () => {
39
+ settled = true;
40
+ if (slowPollTimer)
41
+ clearInterval(slowPollTimer);
42
+ if (timeoutTimer)
43
+ clearTimeout(timeoutTimer);
44
+ };
45
+ const settle = (result) => {
46
+ if (settled)
47
+ return;
48
+ cleanup();
49
+ resolve(result);
50
+ };
51
+ const fail = (err) => {
52
+ if (settled)
53
+ return;
54
+ cleanup();
55
+ reject(err);
56
+ };
57
+ debug('Connecting WebSocket', { approvalId, wsUrl });
58
+ const ws = new WebSocketImpl(wsUrl);
59
+ ws.onopen = () => {
60
+ info('WebSocket connected, waiting for resolution', { approvalId });
61
+ };
62
+ ws.onmessage = (event) => {
63
+ try {
64
+ const data = typeof event.data === 'string'
65
+ ? JSON.parse(event.data)
66
+ : JSON.parse(String(event.data));
67
+ const status = data?.status;
68
+ debug('WebSocket message received', { approvalId, status });
69
+ if (status === 'executed' || status === 'approved' || status === 'rejected' || status === 'expired') {
70
+ info('Approval resolved via WebSocket', { approvalId, status });
71
+ settle({ status, reviewer_note: data?.reviewer_note });
72
+ try {
73
+ ws.close(1000);
74
+ }
75
+ catch { /* already closing */ }
76
+ }
77
+ }
78
+ catch (err) {
79
+ warn('Failed to parse WebSocket message', { approvalId });
80
+ }
81
+ };
82
+ ws.onerror = (err) => {
83
+ const msg = err instanceof Error ? err.message : 'WebSocket error';
84
+ debug('WebSocket error', { approvalId, error: msg });
85
+ fail(new Error(`WebSocket error: ${msg}`));
86
+ };
87
+ ws.onclose = (event) => {
88
+ if (!settled) {
89
+ debug('WebSocket closed without resolution', { approvalId, code: event.code });
90
+ fail(new Error(`WebSocket closed unexpectedly (code ${event.code})`));
91
+ }
92
+ };
93
+ // Handle the already-resolved race: server returns HTTP JSON instead of WS upgrade.
94
+ // The `ws` package emits 'unexpected-response' when it gets a non-101 response.
95
+ if (typeof ws.on === 'function') {
96
+ ws.on('unexpected-response', async (req, res) => {
97
+ try {
98
+ const chunks = [];
99
+ for await (const chunk of res)
100
+ chunks.push(chunk);
101
+ const body = Buffer.concat(chunks).toString();
102
+ const data = JSON.parse(body);
103
+ const status = data?.status;
104
+ if (status && status !== 'pending') {
105
+ info('Approval already resolved (WS endpoint returned JSON)', { approvalId, status });
106
+ settle({ status: status, reviewer_note: data?.reviewer_note });
107
+ return;
108
+ }
109
+ }
110
+ catch { /* fall through to error */ }
111
+ fail(new Error('WebSocket upgrade rejected by server'));
112
+ });
113
+ }
114
+ // Safety net: slow background poll every 30s
115
+ const SLOW_POLL_MS = 30_000;
116
+ slowPollTimer = setInterval(async () => {
117
+ if (settled)
118
+ return;
119
+ try {
120
+ const result = await pollOnce(pollUrl);
121
+ if (result) {
122
+ info('Approval resolved via safety-net poll', { approvalId, status: result.status });
123
+ settle(result);
124
+ try {
125
+ ws.close(1000);
126
+ }
127
+ catch { /* ignore */ }
128
+ }
129
+ }
130
+ catch { /* poll failed — WS is still primary */ }
131
+ }, SLOW_POLL_MS);
132
+ // Timeout
133
+ const remaining = deadline - Date.now();
134
+ if (remaining <= 0) {
135
+ fail(new Error('Approval timeout'));
136
+ return;
137
+ }
138
+ timeoutTimer = setTimeout(() => {
139
+ if (!settled) {
140
+ warn('Approval timed out', { approvalId });
141
+ settle({ status: 'expired' });
142
+ try {
143
+ ws.close(1000);
144
+ }
145
+ catch { /* ignore */ }
146
+ }
147
+ }, remaining);
148
+ });
149
+ }
150
+ // ── Polling Resolution ──────────────────────────────────────────────────────
151
+ async function resolveViaPolling(approvalId, pollUrl, intervalMs, deadline) {
152
+ info('Polling for approval resolution', { approvalId, intervalMs });
153
+ while (Date.now() < deadline) {
154
+ await sleep(intervalMs);
155
+ try {
156
+ const result = await pollOnce(pollUrl);
157
+ if (result) {
158
+ info('Approval resolved via polling', { approvalId, status: result.status });
159
+ return result;
160
+ }
161
+ }
162
+ catch {
163
+ // Network error — keep trying
164
+ }
165
+ }
166
+ warn('Approval polling timed out', { approvalId });
167
+ return { status: 'expired' };
168
+ }
169
+ // ── Helpers ─────────────────────────────────────────────────────────────────
170
+ async function pollOnce(pollUrl) {
171
+ const res = await fetch(pollUrl, {
172
+ headers: { 'User-Agent': 'aerostack-openclaw-bridge/0.11.0' },
173
+ });
174
+ if (!res.ok)
175
+ return null;
176
+ const data = await res.json();
177
+ const status = data.status;
178
+ if (status === 'executed' || status === 'approved') {
179
+ return { status, reviewer_note: data.reviewer_note };
180
+ }
181
+ if (status === 'rejected') {
182
+ return { status: 'rejected', reviewer_note: data.reviewer_note };
183
+ }
184
+ if (status === 'expired') {
185
+ return { status: 'expired' };
186
+ }
187
+ return null; // still pending
188
+ }
189
+ async function getWebSocket() {
190
+ // Use native WebSocket if available (Node 22+), otherwise fall back to ws
191
+ if (typeof globalThis.WebSocket !== 'undefined') {
192
+ return globalThis.WebSocket;
193
+ }
194
+ try {
195
+ const ws = await import('ws');
196
+ return ws.default;
197
+ }
198
+ catch {
199
+ throw new Error('WebSocket not available. Install the "ws" package: npm install ws');
200
+ }
201
+ }
202
+ function sleep(ms) {
203
+ return new Promise(resolve => setTimeout(resolve, ms));
204
+ }
205
+ //# sourceMappingURL=resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution.js","sourceRoot":"","sources":["../src/resolution.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aerostack/openclaw-bridge",
3
- "version": "0.1.1",
3
+ "version": "0.11.0",
4
4
  "description": "stdio-to-HTTP bridge connecting OpenClaw to Aerostack Workspaces via MCP",
5
5
  "author": "Aerostack",
6
6
  "license": "MIT",
@@ -19,11 +19,13 @@
19
19
  "prepublishOnly": "npm run build"
20
20
  },
21
21
  "dependencies": {
22
- "@modelcontextprotocol/sdk": "^1.25.3"
22
+ "@modelcontextprotocol/sdk": "^1.25.3",
23
+ "ws": "^8.18.0"
23
24
  },
24
25
  "devDependencies": {
25
26
  "typescript": "~5.8.3",
26
- "@types/node": "^22.0.0"
27
+ "@types/node": "^22.0.0",
28
+ "@types/ws": "^8.5.13"
27
29
  },
28
30
  "engines": {
29
31
  "node": ">=18"