abb-rws-client 0.7.2 → 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.
Files changed (70) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/README.md +17 -8
  3. package/dist/HalJsonParser.d.ts +55 -0
  4. package/dist/HalJsonParser.d.ts.map +1 -0
  5. package/dist/HalJsonParser.js +155 -0
  6. package/dist/HalJsonParser.js.map +1 -0
  7. package/dist/HttpSession.d.ts.map +1 -1
  8. package/dist/HttpSession.js +13 -2
  9. package/dist/HttpSession.js.map +1 -1
  10. package/dist/IRWSAdapter.d.ts +7 -1
  11. package/dist/IRWSAdapter.d.ts.map +1 -1
  12. package/dist/MdnsDiscovery.d.ts +57 -0
  13. package/dist/MdnsDiscovery.d.ts.map +1 -0
  14. package/dist/MdnsDiscovery.js +313 -0
  15. package/dist/MdnsDiscovery.js.map +1 -0
  16. package/dist/MultiRobotManager.d.ts +5 -2
  17. package/dist/MultiRobotManager.d.ts.map +1 -1
  18. package/dist/MultiRobotManager.js +8 -3
  19. package/dist/MultiRobotManager.js.map +1 -1
  20. package/dist/RWS1Adapter.d.ts +60 -2
  21. package/dist/RWS1Adapter.d.ts.map +1 -1
  22. package/dist/RWS1Adapter.js +152 -4
  23. package/dist/RWS1Adapter.js.map +1 -1
  24. package/dist/ResourceMapper.d.ts +4 -0
  25. package/dist/ResourceMapper.d.ts.map +1 -1
  26. package/dist/ResourceMapper.js +9 -1
  27. package/dist/ResourceMapper.js.map +1 -1
  28. package/dist/RobotManager.d.ts +72 -12
  29. package/dist/RobotManager.d.ts.map +1 -1
  30. package/dist/RobotManager.js +255 -50
  31. package/dist/RobotManager.js.map +1 -1
  32. package/dist/RwsClient2.d.ts +150 -10
  33. package/dist/RwsClient2.d.ts.map +1 -1
  34. package/dist/RwsClient2.js +599 -236
  35. package/dist/RwsClient2.js.map +1 -1
  36. package/dist/WsSubscriber.d.ts +31 -5
  37. package/dist/WsSubscriber.d.ts.map +1 -1
  38. package/dist/WsSubscriber.js +104 -50
  39. package/dist/WsSubscriber.js.map +1 -1
  40. package/dist/detect.d.ts +12 -3
  41. package/dist/detect.d.ts.map +1 -1
  42. package/dist/detect.js +69 -25
  43. package/dist/detect.js.map +1 -1
  44. package/dist/index.d.ts +3 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +2 -0
  47. package/dist/index.js.map +1 -1
  48. package/dist/types.js +3 -3
  49. package/dist/types.js.map +1 -1
  50. package/examples/05-remote-control-rmmp.mjs +10 -12
  51. package/examples/06-pull-module-source.mjs +13 -20
  52. package/package.json +62 -60
  53. package/src/HalJsonParser.ts +137 -0
  54. package/src/HttpSession.ts +460 -0
  55. package/src/IRWSAdapter.ts +422 -0
  56. package/src/Logger.ts +54 -0
  57. package/src/MdnsDiscovery.ts +336 -0
  58. package/src/MultiRobotManager.ts +159 -0
  59. package/src/RWS1Adapter.ts +1018 -0
  60. package/src/RWS2Adapter.ts +19 -0
  61. package/src/ResourceMapper.ts +517 -0
  62. package/src/ResponseParser.ts +710 -0
  63. package/src/RobotManager.ts +1705 -0
  64. package/src/RwsClient.ts +1150 -0
  65. package/src/RwsClient2.ts +2214 -0
  66. package/src/WsSubscriber.ts +350 -0
  67. package/src/XhtmlParser.ts +53 -0
  68. package/src/detect.ts +261 -0
  69. package/src/index.ts +83 -0
  70. package/src/types.ts +336 -0
@@ -4,34 +4,39 @@
4
4
  * Flow:
5
5
  * 1. POST /subscription via HttpSession to register resources → get subscription ID
6
6
  * 2. Open WebSocket to ws://{host}/subscription/{id} with robapi2_subscription subprotocol
7
- * 3. Parse incoming XML event messages emit typed SubscriptionEvent objects
8
- * 4. Auto-reconnect on unexpected close: max 3 retries, exponential backoff 1s/2s/4s
7
+ * 3. subscribe() resolves only once the WebSocket is open; if the socket errors or
8
+ * closes before opening, subscribe() rejects and best-effort DELETEs the
9
+ * registration so the controller-side subscription slot is not leaked
10
+ * 4. Parse incoming XML event messages → emit typed SubscriptionEvent objects
11
+ * 5. Auto-reconnect when an established stream drops: max 3 retries, exponential
12
+ * backoff 1s/2s/4s
9
13
  *
10
- * Uses native globalThis.WebSocket when available (Node 22+, browsers).
11
- * Falls back to the 'ws' npm package for Node 18/21 where native WebSocket is experimental.
14
+ * Always connects through the 'ws' package: the RWS upgrade request must carry the
15
+ * session Cookie header, and native (undici) WebSocket has no headers option it
16
+ * silently ignores the ws-style third constructor argument, so the handshake goes
17
+ * out unauthenticated. Live-verified 2026-07-08 against IRC5 RW6.16: native WS is
18
+ * rejected with HTTP 403, 'ws' with the same Cookie opens and delivers events.
12
19
  */
13
- import { RwsError } from './types.js';
14
20
  import { createRequire } from 'module';
21
+ import { RwsError } from './types.js';
22
+ import { subscriptions } from './ResourceMapper.js';
23
+ import { parseSubscriptionId } from './ResponseParser.js';
24
+ const BACKOFF_MS = [1000, 2000, 4000];
25
+ const MAX_RETRIES = 3;
15
26
  /**
16
- * Resolve a WebSocket constructor: prefer native globalThis.WebSocket,
17
- * fall back to the 'ws' package if available.
27
+ * Resolve the 'ws' package constructor. Never returns native globalThis.WebSocket
28
+ * it cannot send the Cookie header the controller requires for WS auth.
18
29
  */
19
30
  function resolveWebSocket() {
20
- if (globalThis.WebSocket)
21
- return globalThis.WebSocket;
22
31
  try {
23
32
  const require = createRequire(import.meta.url);
24
33
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
34
  return require('ws');
26
35
  }
27
36
  catch {
28
- throw new RwsError('WebSocket is not available. Install the "ws" package or use Node 22+.', 'NETWORK_ERROR');
37
+ throw new RwsError('The "ws" package is required for RWS 1.0 subscriptions but could not be loaded.', 'NETWORK_ERROR');
29
38
  }
30
39
  }
31
- import { subscriptions } from './ResourceMapper.js';
32
- import { parseSubscriptionId } from './ResponseParser.js';
33
- const BACKOFF_MS = [1000, 2000, 4000];
34
- const MAX_RETRIES = 3;
35
40
  // ─── Path builder for subscription resources ─────────────────────────────────
36
41
  /**
37
42
  * Map a SubscriptionResource to its RWS 1.0 event path (with ;state suffix where needed).
@@ -120,15 +125,22 @@ export class WsSubscriber {
120
125
  session;
121
126
  host;
122
127
  port;
128
+ wsCtor;
123
129
  subscriptions = new Map();
124
- constructor(session, host, port) {
130
+ constructor(session, host, port, wsCtor) {
125
131
  this.session = session;
126
132
  this.host = host;
127
133
  this.port = port;
134
+ this.wsCtor = wsCtor;
128
135
  }
129
136
  /**
130
137
  * Subscribe to one or more RWS resources. Returns an unsubscribe function.
131
138
  *
139
+ * Resolves only once the event WebSocket is open. If the socket fails before
140
+ * opening (refused connection, failed upgrade), rejects with RwsError after
141
+ * best-effort deleting the subscription registered by the POST — otherwise the
142
+ * caller believes it has live events while the controller streams to nobody.
143
+ *
132
144
  * @param resources - Array of resources to subscribe to
133
145
  * @param handler - Called for each incoming event
134
146
  * @returns - Async function that cancels the subscription and closes the WebSocket
@@ -171,7 +183,19 @@ export class WsSubscriber {
171
183
  closed: false,
172
184
  };
173
185
  this.subscriptions.set(subscriptionId, sub);
174
- this.openWebSocket(sub);
186
+ // Step 3: open the WebSocket and wait for it — a subscription without a live
187
+ // event stream is worse than no subscription (silent staleness).
188
+ try {
189
+ await this.openWebSocket(sub);
190
+ }
191
+ catch (err) {
192
+ sub.closed = true;
193
+ sub.ws = null;
194
+ this.subscriptions.delete(subscriptionId);
195
+ // Free the controller-side slot registered by the POST — best-effort
196
+ await this.session.delete(sub.deleteUrl).catch(() => undefined);
197
+ throw err;
198
+ }
175
199
  // Return unsubscribe function
176
200
  return async () => {
177
201
  sub.closed = true;
@@ -199,43 +223,73 @@ export class WsSubscriber {
199
223
  await Promise.allSettled(promises);
200
224
  }
201
225
  // ─── WebSocket lifecycle ────────────────────────────────────────────────────
226
+ /**
227
+ * Open the event WebSocket for a subscription. Resolves once the socket is
228
+ * open; rejects if it errors or closes before ever opening (refused connection,
229
+ * rejected upgrade). Reconnect handling for established streams lives in the
230
+ * close handler, so callers of reconnect attempts must catch rejections.
231
+ */
202
232
  openWebSocket(sub) {
203
- const cookieHeader = this.session.getCookieHeader();
204
- const WS = resolveWebSocket();
205
- const ws = new WS(sub.wsUrl, ['robapi2_subscription'], {
206
- headers: { Cookie: cookieHeader },
207
- });
208
- sub.ws = ws;
209
- ws.onopen = () => {
210
- sub.retryCount = 0;
211
- };
212
- ws.onmessage = (event) => {
213
- try {
214
- const data = typeof event.data === 'string' ? event.data : String(event.data);
215
- const events = parseWsMessage(data);
216
- for (const e of events) {
217
- sub.handler(e);
233
+ return new Promise((resolve, reject) => {
234
+ const cookieHeader = this.session.getCookieHeader();
235
+ const WS = this.wsCtor ?? resolveWebSocket();
236
+ const ws = new WS(sub.wsUrl, ['robapi2_subscription'], {
237
+ headers: { Cookie: cookieHeader },
238
+ });
239
+ sub.ws = ws;
240
+ let opened = false;
241
+ const failBeforeOpen = () => {
242
+ reject(new RwsError(`WebSocket for subscription ${sub.id} failed before opening`, 'NETWORK_ERROR'));
243
+ };
244
+ ws.onopen = () => {
245
+ opened = true;
246
+ sub.retryCount = 0;
247
+ resolve();
248
+ };
249
+ ws.onmessage = (event) => {
250
+ try {
251
+ const data = typeof event.data === 'string' ? event.data : String(event.data);
252
+ const events = parseWsMessage(data);
253
+ for (const e of events) {
254
+ sub.handler(e);
255
+ }
218
256
  }
219
- }
220
- catch {
221
- // Silently discard unparseable messages — don't crash the subscriber
222
- }
223
- };
224
- ws.onerror = () => {
225
- // onclose fires after onerror; reconnect logic lives there
226
- };
227
- ws.onclose = (event) => {
257
+ catch {
258
+ // Silently discard unparseable messages — don't crash the subscriber
259
+ }
260
+ };
261
+ ws.onerror = () => {
262
+ // Post-open errors are followed by onclose; reconnect logic lives there
263
+ if (!opened)
264
+ failBeforeOpen();
265
+ };
266
+ ws.onclose = (event) => {
267
+ if (!opened) {
268
+ // Never established — reject and let the caller decide (subscribe
269
+ // deletes the registration; reconnect attempts consume a retry)
270
+ failBeforeOpen();
271
+ return;
272
+ }
273
+ if (sub.closed)
274
+ return; // intentional close — do not reconnect
275
+ if (!event.wasClean) {
276
+ this.scheduleReconnect(sub);
277
+ }
278
+ };
279
+ });
280
+ }
281
+ /** Reconnect a lost (previously open) stream with backoff; gives up after MAX_RETRIES. */
282
+ scheduleReconnect(sub) {
283
+ if (sub.closed || sub.retryCount >= MAX_RETRIES)
284
+ return;
285
+ const delay = BACKOFF_MS[sub.retryCount] ?? BACKOFF_MS[BACKOFF_MS.length - 1];
286
+ sub.retryCount++;
287
+ setTimeout(() => {
228
288
  if (sub.closed)
229
- return; // intentional close — do not reconnect
230
- if (!event.wasClean && sub.retryCount < MAX_RETRIES) {
231
- const delay = BACKOFF_MS[sub.retryCount] ?? BACKOFF_MS[BACKOFF_MS.length - 1];
232
- sub.retryCount++;
233
- setTimeout(() => {
234
- if (!sub.closed)
235
- this.openWebSocket(sub);
236
- }, delay);
237
- }
238
- };
289
+ return;
290
+ // A reconnect attempt that fails before opening consumes a retry and tries again
291
+ this.openWebSocket(sub).catch(() => this.scheduleReconnect(sub));
292
+ }, delay);
239
293
  }
240
294
  }
241
295
  //# sourceMappingURL=WsSubscriber.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WsSubscriber.js","sourceRoot":"","sources":["../src/WsSubscriber.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WsSubscriber.js","sourceRoot":"","sources":["../src/WsSubscriber.ts"],"names":[],"mappings":"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"}
package/dist/detect.d.ts CHANGED
@@ -8,7 +8,7 @@ export interface ConnectOptions {
8
8
  host: string;
9
9
  /** TCP port. If omitted, common ports are probed (5466, 9403, 443 https; 80, 11811 http). */
10
10
  port?: number;
11
- /** Force the transport scheme. If omitted, inferred from port (>=443 → https). */
11
+ /** Force the transport scheme. If omitted, inferred from port (443, 5466, 9403 → https). */
12
12
  https?: boolean;
13
13
  /** Default 'Admin'. */
14
14
  username?: string;
@@ -16,6 +16,15 @@ export interface ConnectOptions {
16
16
  password?: string;
17
17
  /** Per-request timeout in ms. Default 5000. */
18
18
  timeout?: number;
19
+ /**
20
+ * Verify TLS certificates. Default false — ABB controllers (virtual and
21
+ * real) ship self-signed certs, so verification stays off unless the
22
+ * deployment has a CA-signed cert on the controller. Applies to the probe
23
+ * requests and to the RWS 2.0 client this factory constructs.
24
+ * Live-verified 2026-07-09: strict probe rejects the OmniCore VC's
25
+ * self-signed cert (RW7.21); default detects it; plain-HTTP IRC5 unaffected.
26
+ */
27
+ strictTls?: boolean;
19
28
  }
20
29
  export interface ProbeResult {
21
30
  protocol: Protocol;
@@ -28,13 +37,13 @@ export interface ProbeResult {
28
37
  * - "Digest …" → RWS 1.0
29
38
  * - "Basic …" → RWS 2.0
30
39
  */
31
- export declare function probeProtocol(host: string, port: number, useHttps: boolean, timeoutMs?: number): Promise<Protocol | null>;
40
+ export declare function probeProtocol(host: string, port: number, useHttps: boolean, timeoutMs?: number, strictTls?: boolean): Promise<Protocol | null>;
32
41
  /**
33
42
  * Probe common RWS ports on a host and return the first one that answers.
34
43
  * Order favors known defaults: 5466 (OmniCore VC HTTPS), 9403 (alt OmniCore),
35
44
  * 443 (real OmniCore), 80 (real IRC5 HTTP), 11811 (legacy IRC5 VC).
36
45
  */
37
- export declare function probeHost(host: string, timeoutMs?: number): Promise<ProbeResult | null>;
46
+ export declare function probeHost(host: string, timeoutMs?: number, strictTls?: boolean): Promise<ProbeResult | null>;
38
47
  /**
39
48
  * Probe a controller's auth scheme and return the matching protocol-level client,
40
49
  * already connected. The returned client is either an `RwsClient` (RWS 1.0) or
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAC/C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,SAAS,SAAO,GACf,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA6B1B;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAa3F;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA4D3E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAkC9E"}
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAC/C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,SAAS,SAAO,EAChB,SAAS,UAAQ,GAChB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAqC1B;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAa9G;AAYD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA8D3E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CA2D9E"}
package/dist/detect.js CHANGED
@@ -11,9 +11,10 @@ import { RwsError } from './types.js';
11
11
  * - "Digest …" → RWS 1.0
12
12
  * - "Basic …" → RWS 2.0
13
13
  */
14
- export async function probeProtocol(host, port, useHttps, timeoutMs = 3000) {
14
+ export async function probeProtocol(host, port, useHttps, timeoutMs = 3000, strictTls = false) {
15
15
  return new Promise(resolve => {
16
- const agent = useHttps ? new https.Agent({ rejectUnauthorized: false }) : undefined;
16
+ const insecure = useHttps && !strictTls;
17
+ const agent = insecure ? new https.Agent({ rejectUnauthorized: false }) : undefined;
17
18
  const options = {
18
19
  method: 'GET',
19
20
  hostname: host,
@@ -21,6 +22,10 @@ export async function probeProtocol(host, port, useHttps, timeoutMs = 3000) {
21
22
  path: '/rw/system',
22
23
  headers: { Accept: 'application/xhtml+xml;v=2.0' },
23
24
  agent,
25
+ // Per-request as well as on the agent: agent-swapping hosts (VS Code extension
26
+ // host on non-localhost targets) otherwise re-enable TLS verification (issue #2).
27
+ // Under strictTls neither is set, so certs verify normally.
28
+ ...(insecure ? { rejectUnauthorized: false } : {}),
24
29
  };
25
30
  const transport = useHttps ? https : http;
26
31
  const req = transport.request(options, res => {
@@ -36,12 +41,12 @@ export async function probeProtocol(host, port, useHttps, timeoutMs = 3000) {
36
41
  resolve('rws2');
37
42
  return;
38
43
  }
39
- // No challenge but the endpoint exists — assume RWS 2.0 (OmniCore sometimes accepts
40
- // unauth GET on /rw/system if cookies are sticky).
41
- if (res.statusCode && res.statusCode < 500) {
42
- resolve('rws2');
43
- return;
44
- }
44
+ // No Digest/Basic challenge not an RWS controller. Anything else that
45
+ // answers /rw/system (Bearer-protected services, random web servers,
46
+ // captive portals) used to be misreported as rws2, sending connect
47
+ // attempts at hosts that will never speak the protocol. Controllers
48
+ // always challenge an unauthenticated probe, so there is no legitimate
49
+ // challenge-less case to allow.
45
50
  resolve(null);
46
51
  });
47
52
  });
@@ -55,7 +60,7 @@ export async function probeProtocol(host, port, useHttps, timeoutMs = 3000) {
55
60
  * Order favors known defaults: 5466 (OmniCore VC HTTPS), 9403 (alt OmniCore),
56
61
  * 443 (real OmniCore), 80 (real IRC5 HTTP), 11811 (legacy IRC5 VC).
57
62
  */
58
- export async function probeHost(host, timeoutMs = 1500) {
63
+ export async function probeHost(host, timeoutMs = 1500, strictTls = false) {
59
64
  const candidates = [
60
65
  [5466, true],
61
66
  [9403, true],
@@ -64,13 +69,24 @@ export async function probeHost(host, timeoutMs = 1500) {
64
69
  [11811, false],
65
70
  ];
66
71
  for (const [port, https] of candidates) {
67
- const proto = await probeProtocol(host, port, https, timeoutMs);
72
+ const proto = await probeProtocol(host, port, https, timeoutMs, strictTls);
68
73
  if (proto) {
69
74
  return { protocol: proto, port, https };
70
75
  }
71
76
  }
72
77
  return null;
73
78
  }
79
+ /**
80
+ * True when the failure is a credential rejection, in either protocol's flavor:
81
+ * RwsClient throws RwsError code='AUTH_FAILED' (message has no "401"), RwsClient2
82
+ * throws a plain Error with the HTTP status in the message.
83
+ */
84
+ function isAuthRejection(err) {
85
+ if (err instanceof RwsError) {
86
+ return err.code === 'AUTH_FAILED';
87
+ }
88
+ return /401|unauthor/i.test(String(err));
89
+ }
74
90
  /**
75
91
  * Probe a controller's auth scheme and return the matching protocol-level client,
76
92
  * already connected. The returned client is either an `RwsClient` (RWS 1.0) or
@@ -81,11 +97,12 @@ export async function probeHost(host, timeoutMs = 1500) {
81
97
  */
82
98
  export async function createClient(opts) {
83
99
  const { host, username = 'Admin', password = 'robotics', timeout = 5000 } = opts;
100
+ const strictTls = opts.strictTls === true;
84
101
  let port = opts.port;
85
102
  let useHttps = opts.https;
86
103
  let protocol;
87
104
  if (port === undefined) {
88
- const probe = await probeHost(host);
105
+ const probe = await probeHost(host, opts.timeout, strictTls);
89
106
  if (!probe) {
90
107
  throw new RwsError(`No RWS endpoint found on ${host} — tried ports 5466, 9403, 443, 80, 11811`, 'PROTOCOL_DETECT_FAILED');
91
108
  }
@@ -97,7 +114,7 @@ export async function createClient(opts) {
97
114
  if (useHttps === undefined) {
98
115
  useHttps = port === 443 || port === 5466 || port === 9403;
99
116
  }
100
- const detected = await probeProtocol(host, port, useHttps);
117
+ const detected = await probeProtocol(host, port, useHttps, opts.timeout, strictTls);
101
118
  if (!detected) {
102
119
  throw new RwsError(`No RWS auth challenge from ${host}:${port} — controller may be off, wrong port, or non-RWS service`, 'PROTOCOL_DETECT_FAILED');
103
120
  }
@@ -117,7 +134,7 @@ export async function createClient(opts) {
117
134
  return c;
118
135
  }
119
136
  catch (err) {
120
- if (fallbackUser && /401|unauthor/i.test(String(err))) {
137
+ if (fallbackUser && isAuthRejection(err)) {
121
138
  const c = new RwsClient({ host, port, username: fallbackUser, password, timeout });
122
139
  await c.connect();
123
140
  return c;
@@ -127,14 +144,15 @@ export async function createClient(opts) {
127
144
  }
128
145
  else {
129
146
  const scheme = useHttps ? 'https' : 'http';
147
+ const clientOpts = { timeout, rejectUnauthorized: strictTls };
130
148
  try {
131
- const c = new RwsClient2(`${scheme}://${host}:${port}`, username, password);
149
+ const c = new RwsClient2(`${scheme}://${host}:${port}`, username, password, clientOpts);
132
150
  await c.connect();
133
151
  return c;
134
152
  }
135
153
  catch (err) {
136
- if (fallbackUser && /401|unauthor/i.test(String(err))) {
137
- const c = new RwsClient2(`${scheme}://${host}:${port}`, fallbackUser, password);
154
+ if (fallbackUser && isAuthRejection(err)) {
155
+ const c = new RwsClient2(`${scheme}://${host}:${port}`, fallbackUser, password, clientOpts);
138
156
  await c.connect();
139
157
  return c;
140
158
  }
@@ -149,12 +167,13 @@ export async function createClient(opts) {
149
167
  * caring whether the underlying transport is 1.0 or 2.0.
150
168
  */
151
169
  export async function createAdapter(opts) {
152
- const { host, username = 'Admin', password = 'robotics' } = opts;
170
+ const { host, username = 'Admin', password = 'robotics', timeout = 5000 } = opts;
171
+ const strictTls = opts.strictTls === true;
153
172
  let port = opts.port;
154
173
  let useHttps = opts.https;
155
174
  let protocol;
156
175
  if (port === undefined) {
157
- const probe = await probeHost(host);
176
+ const probe = await probeHost(host, opts.timeout, strictTls);
158
177
  if (!probe) {
159
178
  throw new RwsError(`No RWS endpoint found on ${host}`, 'PROTOCOL_DETECT_FAILED');
160
179
  }
@@ -166,22 +185,47 @@ export async function createAdapter(opts) {
166
185
  if (useHttps === undefined) {
167
186
  useHttps = port === 443 || port === 5466 || port === 9403;
168
187
  }
169
- const detected = await probeProtocol(host, port, useHttps);
188
+ const detected = await probeProtocol(host, port, useHttps, opts.timeout, strictTls);
170
189
  if (!detected) {
171
190
  throw new RwsError(`No RWS auth challenge from ${host}:${port}`, 'PROTOCOL_DETECT_FAILED');
172
191
  }
173
192
  protocol = detected;
174
193
  }
194
+ // Same `Default User` retry as createClient — see the comment there.
195
+ const fallbackUser = opts.username === undefined && username === 'Admin'
196
+ ? 'Default User'
197
+ : null;
175
198
  if (protocol === 'rws1') {
176
- const inner = new RwsClient({ host, port, username, password, timeout: opts.timeout ?? 5000 });
177
- await inner.connect();
178
- return new RWS1Adapter(inner, { host, port, username, password });
199
+ try {
200
+ const inner = new RwsClient({ host, port, username, password, timeout });
201
+ await inner.connect();
202
+ return new RWS1Adapter(inner, { host, port, username, password });
203
+ }
204
+ catch (err) {
205
+ if (fallbackUser && isAuthRejection(err)) {
206
+ const inner = new RwsClient({ host, port, username: fallbackUser, password, timeout });
207
+ await inner.connect();
208
+ return new RWS1Adapter(inner, { host, port, username: fallbackUser, password });
209
+ }
210
+ throw err;
211
+ }
179
212
  }
180
213
  else {
181
214
  const scheme = useHttps ? 'https' : 'http';
182
- const a = new RWS2Adapter(`${scheme}://${host}:${port}`, username, password);
183
- await a.connect();
184
- return a;
215
+ const clientOpts = { timeout, rejectUnauthorized: strictTls };
216
+ try {
217
+ const a = new RWS2Adapter(`${scheme}://${host}:${port}`, username, password, clientOpts);
218
+ await a.connect();
219
+ return a;
220
+ }
221
+ catch (err) {
222
+ if (fallbackUser && isAuthRejection(err)) {
223
+ const a = new RWS2Adapter(`${scheme}://${host}:${port}`, fallbackUser, password, clientOpts);
224
+ await a.connect();
225
+ return a;
226
+ }
227
+ throw err;
228
+ }
185
229
  }
186
230
  }
187
231
  //# sourceMappingURL=detect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -24,9 +24,11 @@ export { RWS1Adapter } from './RWS1Adapter.js';
24
24
  export { RWS2Adapter } from './RWS2Adapter.js';
25
25
  export type { IRWSAdapter } from './IRWSAdapter.js';
26
26
  export { RobotManager } from './RobotManager.js';
27
- export type { RobotState, ChangeHandler, ProbeResult, DiscoveredController, ErrorListener } from './RobotManager.js';
27
+ export type { RobotState, ChangeHandler, ProbeResult, DiscoveredController, ErrorListener, RobotManagerOptions } from './RobotManager.js';
28
28
  export { MultiRobotManager } from './MultiRobotManager.js';
29
29
  export type { RobotConfig } from './MultiRobotManager.js';
30
+ export { discoverControllersMdns } from './MdnsDiscovery.js';
31
+ export type { MdnsController, MdnsDiscoveryOptions } from './MdnsDiscovery.js';
30
32
  export { createClient, createAdapter, probeHost, probeProtocol } from './detect.js';
31
33
  export type { AnyClient, Protocol, ConnectOptions, ProbeResult as DetectProbeResult } from './detect.js';
32
34
  export { XhtmlParser } from './XhtmlParser.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpF,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGzG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,MAAM,EACN,SAAS,EACT,SAAS,EACT,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1I,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpF,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGzG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,MAAM,EACN,SAAS,EACT,SAAS,EACT,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -27,6 +27,8 @@ export { RWS2Adapter } from './RWS2Adapter.js';
27
27
  // High-level managers
28
28
  export { RobotManager } from './RobotManager.js';
29
29
  export { MultiRobotManager } from './MultiRobotManager.js';
30
+ // mDNS/Bonjour discovery (also reachable as RobotManager.discoverControllersMdns)
31
+ export { discoverControllersMdns } from './MdnsDiscovery.js';
30
32
  // Auto-detection helpers
31
33
  export { createClient, createAdapter, probeHost, probeProtocol } from './detect.js';
32
34
  // Helpers
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,yBAAyB;AACzB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGpF,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,SAAS;AACT,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,kFAAkF;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,yBAAyB;AACzB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGpF,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,SAAS;AACT,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
package/dist/types.js CHANGED
@@ -1,6 +1,6 @@
1
- // abb-rws-client — type definitions
2
- // Targets RWS 1.0 (RobotWare 6.x) only. Not compatible with RWS 2.0 / RobotWare 7.x / OmniCore.
3
- // v0.5.0 added: UI instructions, RAPID symbol search, controller clock, execution cycle in state, task activate/deactivate, elog seqnum, subscription coldetstate/execycle/elog/uiinstr, opmode lock, controller restart
1
+ // abb-rws-client — shared type definitions
2
+ // Used by BOTH protocol clients: RwsClient (RWS 1.0 / IRC5 / RW6) and
3
+ // RwsClient2 (RWS 2.0 / OmniCore / RW7). See src/index.ts for the public surface.
4
4
  /**
5
5
  * Typed error thrown by all abb-rws-client public methods.
6
6
  * Always check `code` for programmatic error handling.
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,gGAAgG;AAChG,2NAA2N;AAqS3N;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAe;IACnB,UAAU,CAAU;IACpB,SAAS,CAAU;IAE5B,YAAY,OAAe,EAAE,IAAkB,EAAE,UAAmB,EAAE,SAAkB;QACtF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,oFAAoF;QACpF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sEAAsE;AACtE,kFAAkF;AAqSlF;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAe;IACnB,UAAU,CAAU;IACpB,SAAS,CAAU;IAE5B,YAAY,OAAe,EAAE,IAAkB,EAAE,UAAmB,EAAE,SAAkB;QACtF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,oFAAoF;QACpF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF"}
@@ -6,19 +6,18 @@
6
6
  // FlexPendant; the operator taps Allow once and you have write access.
7
7
  //
8
8
  // This is what RobotStudio Online does — that's why it "just works".
9
+ //
10
+ // Run: RWS_HOST=127.0.0.1 RWS_PORT=5466 node examples/05-remote-control-rmmp.mjs
9
11
 
10
- import { RobotManager, RWS2Adapter, RwsClient2 } from 'abb-rws-client';
12
+ import { RobotManager } from 'abb-rws-client';
11
13
 
12
- const client = new RwsClient2({
13
- host: process.env.RWS_HOST || '127.0.0.1',
14
- port: Number(process.env.RWS_PORT) || 5466,
15
- username: process.env.RWS_USER || 'Admin',
16
- password: process.env.RWS_PASS || 'robotics',
17
- });
18
- await client.connect();
14
+ const host = process.env.RWS_HOST || '127.0.0.1';
15
+ const port = process.env.RWS_PORT ? Number(process.env.RWS_PORT) : undefined;
19
16
 
20
- const robot = new RobotManager({ adapter: new RWS2Adapter(client) });
21
- await robot.start();
17
+ // RobotManager auto-detects the protocol (RWS 1.0 vs 2.0) and, when port is
18
+ // omitted, probes the common VC/controller ports.
19
+ const robot = new RobotManager();
20
+ await robot.connect(host, process.env.RWS_USER || 'Admin', process.env.RWS_PASS || 'robotics', port);
22
21
 
23
22
  // 1) Check current RMMP state
24
23
  let priv = await robot.getRmmpPrivilege();
@@ -48,5 +47,4 @@ if (priv === 'modify' || priv === 'exclusive') {
48
47
  console.log(`✗ Operator did not grant RMMP. Cannot do modify ops.`);
49
48
  }
50
49
 
51
- await robot.stop();
52
- await client.disconnect();
50
+ await robot.disconnect();